Faks Gönderimi
Metod
Fax.send_fax
API ile faks gönderme işlemi sonuçları sonradan size push
edilebilir. Bunun için faks durumlarını POST
edebileceğimiz
bir URL
'i hesap tanımında
fax_notification_url
alanında belirtmelisiniz.
API ile faks gönderimleri, gönderimin arkasından dönen cevap ve PUSH mesajlarında JSON
formatı tercih edilmiştir.
Faks gönderiminde dosya da gönderildiğinden FORM DATA
gönderimi yapılır ve data JSON
string
olarak şu şekilde gönderilir:
{
"jsonrpc":"2.0",
"id":"a39f38f3-76cc-4441-b6dd-7d5459cf9ae2",
"method":"Fax.send_fax",
"params":{
"token_":[TOKEN],
"cli":GÖRÜNEN FAX NUMARASI,
"phones":HEDEF FAX NUMARASI,
"cover_html": KAPAK SAYFASI HTML İÇERİĞİ,
"paper_size": "A4",
"resolution": "fine",
"phone_books": REHBER ID'leri,
"contacts": REHBER KİŞİ ID'leri
}
}
Yukarıdaki JSON Verisini(string olarak) aşağıdaki şekilde gönderebilirsiniz:
curl -s -k -i -X POST -F fax_file=@"README.pdf" -F data=JSON VERİSİ 'https://faxmax.net/api/v1'
import json
import requests
r = requests.post('https://faxmax.net/api/v1',
files={'fax_file': ("README.pdf", open("README.pdf", 'rb'), 'application/pdf')},
data={'data': JSON VERİSİ}, verify=False)
print r.status_code, r.text
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => "https://faxmax.net/api/v1",
CURLOPT_HEADER => true,
CURLOPT_POST => 1,
CURLOPT_HTTPHEADER => array("Content-Type:multipart/form-data"),
CURLOPT_POSTFIELDS => array("fax_file" => "@README.pdf",
"data" => JSON VERİSİ
))
),
CURLOPT_RETURNTRANSFER => true
));
$result = curl_exec($ch);
curl_close($ch);
echo $result;
private async void Button_Click(object sender, RoutedEventArgs e)
{
StorageFile inputStream = await localFolder.GetFileAsync("README.pdf");
HttpMultipartFormDataContent multipartContent = new HttpMultipartFormDataContent();
multipartContent.Add( new HttpStreamContent(inputStream), "fax_file", "README.pdf");
multipartContent.Add( new HttpStringContent(JSON VERİSİ), "data");
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.PostAsync( "https://faxmax.net/api/v1", multipartContent);
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine (responseBody);
}
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import java.io.File;
import org.apache.http.conn.ssl.*;
import org.apache.http.impl.client.*;
import java.security.cert.X509Certificate;
import java.security.cert.CertificateException;
import org.apache.http.conn.scheme.*;
import org.apache.http.impl.conn.tsccm.*;
import org.apache.http.conn.*;
//export CLASSPATH=./httpcomponents-client-4.5.1/lib/*:.
public class ApiSendFax {
public static void main(String[] args) throws Exception {
/* Patch ssl hostname validation */
SSLSocketFactory sf = new SSLSocketFactory(new TrustStrategy(){
@Override
public boolean isTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
return true;
}
}, new AllowAllHostnameVerifier());
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https",8444, sf));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(registry);
/* end of patch */
CloseableHttpClient httpclient = new DefaultHttpClient(ccm);
try {
HttpPost httppost = new HttpPost("https://faxmax.net/api/v1");
FileBody faxFile = new FileBody(new File("README.pdf"));
StringBody data = new StringBody(JSON VERİSİ, ContentType.TEXT_PLAIN);
HttpEntity reqEntity = MultipartEntityBuilder.create()
.addPart("fax_file", faxFile)
.addPart("data", data)
.build();
httppost.setEntity(reqEntity);
CloseableHttpResponse response = httpclient.execute(httppost);
try {
System.out.println(response.getStatusLine());
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
System.out.println("Response content length: " + resEntity.getContentLength());
}
EntityUtils.consume(resEntity);
} finally {
response.close();
}
} finally {
httpclient.close();
}
}
}
var form_data = new FormData();
form_data.append('data', JSON VERİSİ);
if (page.find("[name='fax_file']")[0].files) {
form_data.append("fax_file", page.find("[name='fax_file']")[0].files[0]);
} else {
form_data.append("fax_file", null);
}
$.ajax({
url: "https://faxmax.net/api/v1",
type: 'POST',
success: function(data, textStatus, jqXHR){
console.log(data.result);
},
error: function(jqXHR, textStatus, errorThrown){
console.error(textStatus);
}
cache: false,
contentType: false,
processData: false
});
package main
import (
"bytes"
"fmt"
"io"
"log"
"mime/multipart"
"net/http"
"os"
"path/filepath"
)
// Creates a new file upload http request with optional extra params
func sendFax(uri string, params map[string]string, paramName, path string) (*http.Request, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, err := writer.CreateFormFile(paramName, filepath.Base(path))
if err != nil {
return nil, err
}
_, err = io.Copy(part, file)
for key, val := range params {
_ = writer.WriteField(key, val)
}
err = writer.Close()
if err != nil {
return nil, err
}
return http.NewRequest("POST", uri, body)
}
func main() {
data := map[string]stringJSON VERİSİ
request, err := sendFax("https://faxmax.net/api/v1", data, "fax_file", "README.pdf")
if err != nil {
log.Fatal(err)
}
client := &http.Client{}
resp, err := client.Do(request)
if err != nil {
log.Fatal(err)
} else {
body := &bytes.Buffer{}
_, err := body.ReadFrom(resp.Body)
if err != nil {
log.Fatal(err)
}
resp.Body.Close()
fmt.Println(resp.StatusCode)
fmt.Println(resp.Header)
fmt.Println(body)
}
}
Form data alanı içeriği |
||
---|---|---|
Parametre | Zorunlu? | Açıklama |
cli | Hayır | Görünenen Numara(Hesap) |
token* | Evet** | Giriş için kullanılacak TOKEN bilgisi * TOKEN yerine username ve password bilgileri gönderilebilir.** Eğer username ve password belirtilmemiş ise TOKEN mutlaka belirtilmelidir. |
phones | Evet | Faks gönderilecek numaralar. string (Örnek: "90216..." ), array of string
(Örnek: ["90216...", "90212..."] ) veya array of object (Örnek:
|
phone_books | Hayır | Faks gönderilecek rehberlerlerin id'leri. string, array of string olabilir |
contacts | Hayır | Faks gönderilecek rehberler'deki kişilerin id'leri. string, array of string olabilir |
cover_html | Hayır | Kapak sayfası olarak gönderilecek içerik. HTML olmalı. |
paper_size | Hayır | Sayfa tipi. A4, letter veya legal tiplerinden birisi olmalı. Değer verilmediyse A4 kabul edilir. |
resolution | Hayır | Sayfa çözünürlüğü. normal, fine veya süperfine tiplerinden birisi olmalı. Değer verilmediyse fine kabul edilir. |
Form fax_file alanı içeriği |
||
---|---|---|
Parametre | Zorunlu? | Açıklama |
filename | Evet | Faks gönderilmesi istenen dosya adı |
- | Evet | Faks gönderilecek dosyanın içeriği |
Faks Gönderim Cevabı
Yukarıdaki örnekteki CURL
isteğine şu şekilde cevap alırsınız:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 458
Date: Tue, 05 Jan 2016 12:05:31 GMT
{
"id": "a39f38f3-76cc-4441-b6dd-7d5459cf9ae2",
"jsonrpc": "2.0",
"result": {
"message": {
"data": {
"count": 1,
"phones": [
{
"api_id": null,
"fax_id": "ca1d30ec-8671-4ff0-94e2-0111f1588cdd"
}
],
"rejected": [],
"request_id": "497892ed-d4c6-4ac0-b948-246e9bf4f61f"
}
}
}
}
Faks Gönderim Cevabı | ||
---|---|---|
Parametre | Açıklama | |
count | Toplam kabul edilen faks numarası sayısı | |
phones | Kabul edilen fax numaraları | |
phones.api_id | Eğer api_id gönderildi ise burada gönderdiğiniz değer olur | |
phones.fax_id | Faks ID'si | |
rejected | Kabul edilmeyen faks numaraları | |
request_id | Oluşturulan Faks İsteğinin ID'si |
Faks Durumu PUSH
Bildirimleri
FaxMAX API ile gönderdiğiniz faksların her birinin durumunu sizin yazılımınıza bildirebilir. Bunun için Hesap tanımımınızda "Geri bildirim URL'i tanımlı olması gerekir"
Bildireceğiniz bu "Geri bildirim URL"'line faks durumu POST
edilecektir. Sizteminize ulaşılamaması veya hata olması durumunda sistem bir süre sonra tekrar deneyecektir.
[
{
"type": TIP,
"id"": FAX_ID,
"account_id": HESAP ID,
"account_name": HESAP ADI,
"cli": ARAYAN,
"cld": ARANAN,
"status": DURUM,
"requested_on": ISTEK ZAMANI,
"result_message": SONUÇ MESAJI,
"page_count": SAYFA SAYISI,
"total_page_count": TOPLAM SAYFA SAYISI,
"ecm_used": ECM AÇIK MIYDI,
"has_t38": T38 AÇIK MIYDI,
"remote_station_id": KARŞI FAX SİSTEM ADI,
"fax_encoding": FAX ENCODING,
"transfer_rate": TRANSFER HIZI (bps),
"content": BASE64 İçerik
},
...
]
Faks PUSH Detayları | |
---|---|
Parametre | Açıklama |
type | GelenINCOMING_FAX veya giden OUTGOING_FAX fax tiplerinden birisi |
id | Faks sistem ID'si |
account_id | Hesap sistem ID'si |
account_name | Hesap adı |
cli | Faksı gönderen telefon numarası |
cld | Faksı alan telefon numarası |
status | Faks teslim durumu |
requested_on | Faksın kullanıcı tarafından gönderdildiği zaman |
page_count | Transfer edilen sayfa sayısı |
total_page_count | Transfer edilen toplam sayfa sayısı |
ecm_used | ECM kullanım durumu |
has_t38 | T38 açık mıydı |
remote_station_id | Karşı faks cihazı kimliği |
fax_encoding | Kullanılan fax encoding |
transfer_rate | Transfer Hızı(bps) |
content | Gelen fakslarda, BASE64 formatında fax içeriği(tiff) |
sent_on | Giden fakslarda, faksın gönderim zamanı |
queued_on | Giden fakslarda, faksın kuyruklama zamanı |
tried_on | Giden fakslarda, faksın gönderim son deneme zamanı |
tried_count | Giden fakslarda, faksın gönderim deneme sayısı |