+90 (216) 222 25 25

FaxMAX API

FaxMAX

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.

FaxMAX API Push Message

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": "90216...",
        "api_id":"1234"
    }, {
        "phone": "90212...",
        "api_id":"1235"
    }
]
            
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ı
BİZE YAZIN
BİZE YAZIN
 
*
*
*