AIML – Dış Sistem Web Servis Entegrasyonu

Bu özelliğin kullanılabilmesi için servisin HTTP POST veya HTTPS POST ile JSON formatında mesaj kabul edecek bir Restful Web Service açması gerekmektedir. HTTP POST kullanıldığında authentication gerekmez, HTTPS POST kullanıldığında basic authentication gerekir. Basic Authentication için servis tanım sürecinde verilen username ve password kullanılır.

⚠️ Mesaj gönderimi için uyulması gerekilen tüm kurallar (her bir mesajın yapısı) TES API dokümanlarında açıklanmştır. Bu kurallara uyulmaması durumunda mesaj kullanıcıya iletilemez. REX ile dış sistemler arasındaki ws interface lerinde ratio bilgisinin verilmesi zorunlu değildir. Rex sistemi bu bilgileri kendisi tamamlamaktadır.
İstek
ÖzellikDeğerAçıklama
msgIdstringKarsılıklı sistem loglarında inceleme yapılması gerektiğinde kullanılacak ortak bilgi
serviceIdstringServis tanım sürecinde verilen service id
transferDatastringREX sistemi dış sistemdeki bir web servis ile iletişim kurulacağı zaman dinamik parametre geçişine imkan sağlar. Dinamik parametreler map yapısı içinde key/value çiftleri halinde iletilir. bip_parameter komutu ile AIML içinden dinamik parametre iletmek mümkündür. Dinamik bilgiler transferData alanında gönderilir. Kullanımı zorunlu değildir
Yanıt
ÖzellikDeğerAçıklama
msgIdKarsılıklı sistem loglarında inceleme yapılması gerektiğinde kullanılacak ortak bilgi.
compositionCompositionWS ten dönülen mesaj dizisi (list)
listList
typeIntegerMesaj türü 0 : Metin 2 : Image 3 : Audio 4 : Video 7 : Lokasyon 8 : Zengin İçerikli Mesaj 13 : Media Mesajı ( TMM )
tmmTypeIntegertype = 13 iken; 0 : Tekli Media 1 : Çoklu Media 2 : Anket Media 3 : Hızlı cevap Media 4 : Sıralı Media
tmmSingletype = 13, tmmType = 0 iken gönderilir.
tmmMultipletype = 13, tmmType = 1 iken gönderilir.
tmmQuickReplytype = 13, tmmType = 3 iken gönderilir.
tmmCarouseltype = 13, tmmType = 4 iken gönderilir.
tmmPolltype = 13, tmmType = 2 iken gönderilir.
richmediatypetype = 8 iken; 4 : Onay sorusu (Consent Simple) 5 : Input alan Onay sorusu (Consent Input ) 6 : Onay sorusunun cevabı ( Consent Simplme Response ) 7 : Input alan Onay sorusunun cevabı ( Consent Input Response )
messageStringMetin mesajları için kullanıcının okuyacağı UTF-8 karakter dizisidir. Resim, ses ve video için ilgili media dosyasının bulunduğu URL bilgisidir. (Not: Resim, ses ve video dosyalarının BIP uygulamasında düzgün görüntülenebilmesi için öncelikle FTS sunucusuna yüklenmesi gerekmektedir).
dataMapKey/Value yapısında bilgi taşıyabilen liste yapısı. Her mesaj tipine göre farklı key/value içeriği yer alabilir. Doldurulması zorunlu değildir. Dosyaların gönderimi için gerekli olan size-width-height bilgilerinin Servis Sağlayıcı tarafından ir sefer hesaplanıp “data” alanı içinde REX e gönderilmesi tavsiye edilir. Ancak zorunlu değildir.

Composition list’i içindeki type’a göre Optional data değerleri

Text: Map yapısı bilgisi gerekmez.

Image:

Audio:

size : Dosyanın boyutu (bytes). Gönderimi zorunlu değildir.

Video:

Sticker: Map yapısı bilgisi gerekmez. Gönderimi zorunlu değildir.

Caps:

Location:

title: Gönderimi zorunlu değildir.

desc : Gönderimi zorunlu değildir.

REX ten WS yönüne bip_webservice_call ve bip_webservice_query ile yapılan isteklerde şu an sadece type = 0 ( Metin ) mesajlarin gönderimi desteklenmektedir.

⚠️ Mesajlar hazırlarken TES API dokümanlarında belirtilen kısıtlara uyulması gerekir.

bip_webservice_call komutu;

AIML içinden DOLAR kurunu sorgulamak amaçlı bir web servis çağrılmak istendiğinde, bip_parameter komutuyla aşağıdakine benzer dinamik parametre tanımları yapılır ve istek JSON içinde transferData alanında gönderilmesi sağlanır. TransferData alanında gönderilen farklı bilgilerle hangi amaçla web servis çağrılmak istendiği ayırt edilmelidir. Bu sayede aynı web servis birden çok amaca hizmet edebilecek şekilde yazılabilinir.

AIML ile dış sistem ws ‘ine dinamik parametre gönderimi;

<bip_webservice_call host="EXTERNAL_WS_URL">
    <bip_parameter name='sender'><bip_sender/></bip_parameter>
    <bip_parameter name='action'>DOLAR</bip_parameter>
    <bip_webservice_call_result var='wscallresult' /> 
</bip_webservice_call>

Dış sistem ws ‘ine aşağıdaki JSON isteği yapılır;

{ 
   "transferData":{ 
      "sender":"9053XXXXXXXX",
      "action":"DOLAR"
   },
   "msgId":"1",
   "serviceId":8309
}

Dış sistem ws ‘inde dönebilecek örnek JSON;

{ 
   "msgId":"1",
   "composition":{ 
      "list":[ 
         { 
            "type":0,
            "message":"Değerli müşterimiz, USD = 2,9660\r\nCep Şubesi ile işlemlerinizi dilediğiniz zaman dilediğiniz yerden gerçekleştirmek için tıklayın."
         },
         { 
            "type":2,
            "message":"https://timsac.turkcell.com.tr/scontent/p2p/14112016/11/P1e646f5c03a7b4b44f6da1329ac218e322da72356e79e5116dff86e3fc255a228.png",
            "data":{ 
               "height":762,
               "width":1000,
               "size":684728
            }
         },
         { 
            "type":3,
            "message":"https://timsac.turkcell.com.tr/scontent/p2p/04032016/05/A796cf1d3ec44217f7fcb3d92a1d8fa4dc244abc2ff6b72004ce6589d6b532e0a5.mp3",
            "data":{ 
               "size":28976
            }
         },
         { 
            "type":4,
            "message":"https://timsac.turkcell.com.tr/scontent/p2p/04032016/10/Vedb8d12f22a3ac286622841e61203b2d09805a24c893c47548d98ef675e771295.mp4",
            "data":{ 
               "height":353,
               "width":353,
               "size":5230592
            }
         },
         { 
            "type":7,
            "data":{ 
               "lon":29.117432,
               "lat":40.95579
            }
         }
      ]
   }
}

Dış sistem ws ‘inden Tekli Media(STMM) dönüşü yapılması;

JSON da geçen “that” alanı zorunlu değildir. “that” ile verilen değer kullanılarak AIML içinden verilen cevaplar karşılanabilinir.

{  
   "msgId":"125df2e0-cacb-49a2-a948-87ce040c4b64_92 ",
   "composition":{  
      "list":[  
         {  
            "type":13,
            "tmmType":0,
            "tmmSingle":{  
               "title":"msg title",
               "description":"ws call msg desc",
               "image":{  
                  "url":"https://timsac.turkcell.com.tr/scontent/p2p/14112016/11/P1e646f5c03a7b4b44f6da1329ac218e322da72356e79e5116dff86e3fc255a228.png",
                  "ratio":1.0,
                  "button":{  
                     "type":0,
                     "name":"button-1",
                     "url":"https://www.google.com.tr"
                  }
               },
               "buttonlist":[  
                  {  
                     "type":0,
                     "name":"button-2",
                     "url":"https://www.google.com.tr"
                  },
                  {  
                     "type":1,
                     "name":"button-3",
                     "payload":"Payload_2001__POSTBACK"
                  }
               ],
               "postbackid":"PostbackTMM_EXTWS_1500554388650_END",
               "that":"getstmm"
            }
         }
      ]
   }
}

Tekli Medya (STMM) mesajına verilen cevabın Dış sistem ws’ine iletilmesi;

{  
   "msgId":"88c80bf5-4007-4816-ac0d-e4d6d8c22e9f_94 ",
   "serviceId":8332,
   "content":{  
      "type":103,
      "tmmType":0,
      "tmmPostbackResponse":{  
         "payload":"Payload_2001__POSTBACK",
         "postbackid":"PostbackTMM_EXTWS_1500554388650_END"
      }
   }
}

Tekli Medya (STMM) mesajına verilen cevabın AIML içinde yakalanmak istenmesi;

<aiml version='1.0.1' encoding='UTF-8'>
    
    <category>
        <pattern>*</pattern>
        <that type='bip_webservice_call'>getstmm</that>
        <template>STMM de <star/> secildi. 
        </template>
    </category>
    
</aiml>

Dış sistem ws ‘inden Çoklu Media (MTMM) dönüşü yapılması;

JSON da geçen “that” alanı zorunlu değildir. “that” ile verilen değer kullanılarak AIML içinden verilen cevaplar karşılanabilinir.

{  
   "msgId":"7c206035-a1a8-4913-89f1-de327d4c2340_96 ",
   "composition":{  
      "list":[  
         {  
            "type":13,
            "tmmType":1,
            "tmmMultiple":{  
               "maintitle":"msg title",
               "maindescription":"msg desc",
               "mainimage":{  
                  "url":"https://timsac.turkcell.com.tr/scontent/p2p/14112016/11/P1e646f5c03a7b4b44f6da1329ac218e322da72356e79e5116dff86e3fc255a228.png",
                  "ratio":1.0,
                  "button":{  
                     "type":0,
                     "name":"button-1",
                     "url":"https://www.google.com.tr"
                  }
               },
               "mainbuttonlist":[  
                  {  
                     "type":0,
                     "name":"button-2",
                     "url":"https://www.google.com.tr"
                  },
                  {  
                     "type":1,
                     "name":"button-3",
                     "payload":"Payload_3001__POSTBACK"
                  }
               ],
               "sublist":[  
                  {  
                     "title":"msg title 1",
                     "description":"msg desc 1 ",
                     "image":{  
                        "url":"https://timsac.turkcell.com.tr/scontent/p2p/14112016/11/P1e646f5c03a7b4b44f6da1329ac218e322da72356e79e5116dff86e3fc255a228.png",
                        "ratio":1.0,
                        "button":{  
                           "type":0,
                           "name":"button-4",
                           "url":"https://www.google.com.tr"
                        }
                     },
                     "buttonlist":[  
                        {  
                           "type":0,
                           "name":"button-5",
                           "url":"https://www.google.com.tr"
                        },
                        {  
                           "type":1,
                           "name":"button-6",
                           "payload":"Payload_3003__POSTBACK"
                        }
                     ]
                  },
                  {  
                     "title":"msg title 2",
                     "description":"msg desc 2",
                     "image":{  
                        "url":"https://timsac.turkcell.com.tr/scontent/p2p/14112016/11/P1e646f5c03a7b4b44f6da1329ac218e322da72356e79e5116dff86e3fc255a228.png",
                        "ratio":1.0,
                        "button":{  
                           "type":0,
                           "name":"button-7",
                           "url":"https://www.google.com.tr"
                        }
                     },
                     "buttonlist":[  
                        {  
                           "type":0,
                           "name":"button-8",
                           "url":"https://www.google.com.tr"
                        },
                        {  
                           "type":1,
                           "name":"button-9",
                           "payload":"Payload_3005__POSTBACK"
                        }
                     ]
                  }
               ],
               "postbackid":"PostbackTMM_EXTWS_1500554580836_END",
               "that":"getmtmm"
            }
         }
      ]
   }
}

Çoklu Media (MTMM) mesajına verilen cevabın Dış sistem ws’ine iletilmesi;

{  
   "msgId":"7527963d-0767-4bc4-afe9-7843ee116030_100 ",
   "serviceId":8332,
   "content":{  
      "type":103,
      "tmmType":1,
      "tmmPostbackResponse":{  
         "payload":"Payload_3001__POSTBACK",
         "postbackid":"PostbackTMM_EXTWS_1500554580836_END"
      }
   }
}

Çoklu Media (MTMM) mesajına verilen cevabın AIML içinde yakalanmak istenmesi;

<aiml version='1.0.1' encoding='UTF-8'>
    
    <category>
        <pattern>*</pattern>
        <that type='bip_webservice_call'>getmtmm</that>
        <template>MTMM de <star/> secildi. 
        </template>
    </category>
    
</aiml>

Dış sistem ws ‘inden Sıralı Media (CarouselTMM) dönüşü yapılması;

JSON da geçen “that” alanı zorunlu değildir. “that” ile verilen değer kullanılarak AIML içinden verilen cevaplar karşılanabilinir.

{  
   "msgId":"acffb97a-a10b-43e8-94f1-6831b6385f22_103 ",
   "composition":{  
      "list":[  
         {  
            "type":13,
            "tmmType":4,
            "tmmCarousel":{  
               "list":[  
                  {  
                     "title":"msg title 1",
                     "description":"msg desc 1 ",
                     "image":{  
                        "url":"https://timsac.turkcell.com.tr/scontent/p2p/14112016/11/P1e646f5c03a7b4b44f6da1329ac218e322da72356e79e5116dff86e3fc255a228.png",
                        "ratio":1.0
                     },
                     "buttonlist":[  
                        {  
                           "type":0,
                           "name":"button-1",
                           "url":"https://www.google.com.tr"
                        },
                        {  
                           "type":1,
                           "name":"button-2",
                           "payload":"Payload_4001__POSTBACK"
                        }
                     ]
                  },
                  {  
                     "title":"msg title 2",
                     "description":"msg desc 2",
                     "image":{  
                        "url":"https://timsac.turkcell.com.tr/scontent/p2p/14112016/11/P1e646f5c03a7b4b44f6da1329ac218e322da72356e79e5116dff86e3fc255a228.png",
                        "ratio":1.0
                     },
                     "buttonlist":[  
                        {  
                           "type":0,
                           "name":"button-3",
                           "url":"https://www.google.com.tr"
                        },
                        {  
                           "type":1,
                           "name":"button-4",
                           "payload":"Payload_4003__POSTBACK"
                        }
                     ]
                  }
               ],
               "postbackid":"PostbackTMM_EXTWS_1500554889863_END",
               "that":"getcarousel"
            }
         }
      ]
   }
}

Sıralı Media (CarouselTMM) mesajına verilen cevabın Dış sistem ws’ine iletilmesi;

{  
   "msgId":"f654518c-a477-4995-a4e9-c4e4a86cffd3_116 ",
   "serviceId":8332,
   "content":{  
      "type":103,
      "tmmType":4,
      "tmmPostbackResponse":{  
         "payload":"Payload_4001__POSTBACK",
         "postbackid":"PostbackTMM_EXTWS_1500554889863_END"
      }
   }
}

Dış sistem ws ‘inden Hızlı Cevap Media (QuickReplyTMM) dönüşü yapılması;

JSON da geçen “that” alanı zorunlu değildir. “that” ile verilen değer kullanılarak AIML içinden verilen cevaplar karşılanabilinir Hızlı Cevap Media (QuickReplyTMM) mesajına verilen cevabın Dış sistem ws’ine iletilmesi;

İstek
{  
   "msgId":"23015fdd-238c-4ecb-ba11-cdef0acdda40_112 ",
   "composition":{  
      "list":[  
         {  
            "type":13,
            "tmmType":3,
            "tmmQuickReply":{  
               "buttonlist":[  
                  {  
                     "type":1,
                     "name":"button-1",
                     "payload":"Payload_5000__POSTBACK"
                  },
                  {  
                     "type":1,
                     "name":"button-2",
                     "payload":"Payload_5001__POSTBACK"
                  }
               ],
               "postbackid":"PostbackTMM_EXTWS_1500555113801_END",
               "that":"getquickreply"
            }
         }
      ]
   }
}
Yanıt
{  
   "msgId":"5165c34a-6d98-41c2-bbca-8799a1676f8f_136 ",
   "serviceId":8332,
   "content":{  
      "type":103,
      "tmmType":3,
      "tmmPostbackResponse":{  
         "payload":"Payload_5001__POSTBACK",
         "postbackid":"PostbackTMM_EXTWS_1500555113801_END"
      }
   }
}

Dış sistem ws ‘inden Tek seçim yapılabilinen Anket Media (SingleSelection-PollTMM) dönüşü yapılması;

İstek
{  
   "msgId":"2a1be83c-79d5-4163-862c-54769967eb65_119 ",
   "composition":{  
      "list":[  
         {  
            "type":13,
            "tmmType":2,
            "tmmPoll":{  
               "title":"msg title",
               "description":"msg desc",
               "image":{  
                  "url":"https://timsac.turkcell.com.tr/scontent/p2p/14112016/11/P1e646f5c03a7b4b44f6da1329ac218e322da72356e79e5116dff86e3fc255a228.png",
                  "ratio":1.0
               },
               "polltype":0,
               "pollid":"PollTMM_EXTWS_1500555359472_END",
               "pollendtime":"20.07.2017 13:30:59.472 +0000",
               "optionlist":[  
                  {  
                     "optionid":0,
                     "name":"option 1"
                  },
                  {  
                      "optionid":1,
                      "name":"option 2"
                  },
                  {  
                      "optionid":2,
                      "name":"option 3"
                  }
               ],
               "buttonname":"Cevapla",
               "that":"getptmmsingle"
            }
         }
      ]
   }
}
Yanıt
  {  
   "msgId":"377ee15e-7bae-4f63-85ef-823e813e8006_126 ",
   "serviceId":8332,
   "content":{  
      "type":104,
      "tmmType":2,
      "tmmPollResponse":{  
         "pollid":"PollTMM_EXTWS_1500555359472_END",
         "optionids":[  
            0
         ]
      }
   }
}

Dış sistem ws ‘inden Çoklu seçim yapılabilinen Anket Media (MultipleSelection-PollTMM) dönüşü yapılması;

İstek
{  
   "msgId":"d15d82a8-0816-44b1-b6a0-dff6299f5906_122 ",
   "composition":{  
      "list":[  
         {  
            "type":13,
            "tmmType":2,
            "tmmPoll":{  
               "title":"msg title",
               "description":"msg desc",
               "image":{  
                  "url":"https://timsac.turkcell.com.tr/scontent/p2p/14112016/11/P1e646f5c03a7b4b44f6da1329ac218e322da72356e79e5116dff86e3fc255a228.png",
                  "ratio":1.0
               },
               "polltype":1,
               "pollid":"PollTMM_EXTWS_1500555466766_END",
               "pollendtime":"20.07.2017 13:32:46.766 +0000",
               "optionlist":[  
                  {  
                     "optionid":1000,
                     "name":"option 1"
                  },
                  {  
                     "optionid":1001,
                     "name":"option 2"
                  },
                  {  
                     "optionid":1002,
                     "name":"option 3"
                  }
               ],
               "buttonname":"Cevapla",
               "that":"getptmmmultiple"
            }
         }
      ]
   }
}
Yanıt
{  
   "msgId":"74e2923f-e7f0-400b-adf4-49e884e1a5c2_135 ",
   "serviceId":8332,
   "content":{  
      "type":104,
      "tmmType":2,
      "tmmPollResponse":{  
         "pollid":"PollTMM_EXTWS_1500555684770_END",
         "optionids":[  
            1000,
            1002
         ]
      }
   }
}
Dış sistem ws ‘inden Onay Sorusu(Consent – Simple) dönüşü yapılması;
{  
   "msgId":"9be6b573-d485-445d-beaf-149738a2690e_326 ",
   "composition":{  
      "list":[  
         {  
            "type":8,
            "richmediatype":4,
            "consent":{  
               "consentid":"ConsentRMM_Simple_EXTWS_1500592906272_END",
               "description":"consent simple question?",
               "leftbutton":{  
                  "id":402,
                  "text":"hayır"
               },
               "rightbutton":{  
                  "id":401,
                  "text":"evet"
               },
               "that":"getconsent_simple"
            }
         }
      ]
   }
}

Onay Sorusu(Consent – Simple) mesajına verilen cevabın Dış sistem ws’ine iletilmesi;

{  
   "msgId":"71f128aa-1c8a-4f41-a686-2d33f39ec92c_332 ",
   "serviceId":8332,
   "content":{  
      "type":101,
      "richmediatype":4,
      "consentresponse":{  
         "consentid":"ConsentRMM_Simple_EXTWS_1500592906272_END",
         "buttonid":401
      }
   }
}

Onay Sorusu(Consent – Simple) mesajına verilen cevabın AIML içinde yakalanmak istenmesi;

<aiml version='1.0.1' encoding='UTF-8'>
    <category>
        <pattern>*</pattern>
        <that type='bip_webservice_call'>getconsent_simple</that>
        <template>
            <star/> seçimi için teşekkürler.
        </template>
    </category>		
</aiml>

Dış sistem ws ‘inden Input alan Onay Sorusu(Consent – Input) dönüşü yapılması;

 {  
   "msgId":"5bf8dbbd-b1d3-4353-91e7-f5ef982e060b_328 ",
   "composition":{  
      "list":[  
         {  
            "type":8,
            "richmediatype":5,
            "consent":{  
               "consentid":"ConsentRMM_Input_EXTWS_1500592970810_END",
               "description":"consent input question?",
               "leftbutton":{  
                  "id":302,
                  "text":"hayır"
               },
               "rightbutton":{  
                  "id":301,
                  "text":"evet"
               },
               "that":"getconsent_input"
            }
         }
      ]
   }
}

Input alan Onay Sorusu(Consent – Input) mesajına verilen cevabın Dış sistem ws’ine iletilmesi;

{  
   "msgId":"a31142f9-e0ca-4445-b325-ef827e61db59_330 ",
   "serviceId":8332,
   "content":{  
      "type":101,
      "richmediatype":5,
      "consentresponse":{  
         "consentid":"ConsentRMM_Input_EXTWS_1500592970810_END",
         "buttonid":302,
         "inputtext":""
      }
   }
}

Input alan Onay Sorusu(Consent – Input) mesajına verilen cevabın AIML içinde yakalanmak istenmesi;

<aiml version='1.0.1' encoding='UTF-8'>
    <category>
        <pattern>*</pattern>
        <that type='bip_webservice_call'>getconsent_input</that>
        <template>
            <star/> seçimi için teşekkürler.
        </template>
    </category>
</aiml>

bip_webservice_query komutu;

Yapılan isteklerde WS ten REX e dolayısıyla AIML içinde dönüşler için şu an sadece type = 0 ( Metin ) mesajlarin gönderimi desteklenmektedir. AIML içinden DOLAR kurunu sorgulamak amaçlı bir web servis çağrılmak istendiğinde, bip_parameter komutuyla aşağıdakine benzer dinamik parametre tanımları yapılır ve istek JSON içinde transferData alanında gönderilmesi sağlanır. TransferData alanında gönderilen farklı bilgilerle hangi amaçla web servis çağrılmak istendiği ayırt edilmelidir. Bu sayede aynı web servis birden çok amaca hizmet edebilecek şekilde yazılabilinir.

AIML ile dış sistem ws ‘ine dinamik parametre gönderimi;

<bip_webservice_query host="EXTERNAL_WS_URL">
    <bip_parameter name='sender'><bip_sender/></bip_parameter>
    <bip_parameter name='action'>DOLAR</bip_parameter>
    <bip_webservice_query_result var="wscallsucceed" /> 
    <bip_webservice_query_response var="syncresponselist" />
    <bip_webservice_query_response_size var="syncresponselistsize" />   
</bip_webservice_query>
İstek
 { 
   "transferData":{ 
      "sender":"9053XXXXXXXX",
      "action":"DOLAR"
   },
   "msgId":"1",
   "serviceId":8309
}
Yanıt
 { 
   "msgId":"1",
   "composition":{ 
      "list":[ 
         { 
            "type":0,
            "message":"Değerli müşterimiz, USD = 2,9660\r\nCep Şubesi ile işlemlerinizi dilediğiniz zaman dilediğiniz yerden gerçekleştirmek için tıklayın."
         }
      ]
   }
}