Integracja z systemami zewnętrznymi

Wbuduj w swoją aplikację funkcjonalność telefonu.

Platforma Limtel.pl pozwala na integrowanie stworzonych w niej linii telefonicznych z Twoimi systemami teleinformatycznymi. Dzięki poleceniu http możesz przesłać dowolne dane do swojego API i wedle jego odpowiedzi pokierować dalej rozmową.

Twoja aplikacja może być w dowolnym języku np. PHP, Ruby, Python, C#, Java. Jedynym warunkiem jest możliwość przesłania do niej poprzez protokół HTTP zapytań GET i/lub POST. Sposób zrealizowania tego warunku od Twojej strony zależy tylko od Ciebie - może to być strona w PHP pracująca pod kontrolą serwera Apache, aplikacja w Ruby On Rails, Sinatra, Django, czy nawet jedynie dodatkowy daemon przyjmujący połączenia HTTP i piszący do wspólnej bazy danych z Twoją aplikacją.

Przykład 1: Sprawdzenie stanu paczki w sklepie internetowym.

Użytkownik prowadzi sklep internetowy. Chce, żeby klienci dzwoniący na jego infolinię mogli bez udziału konsultanta sprawdzić stan swojego zamówienia. Przygotowuje więc prostą podstronę na swoim serwerze www służącą jako API dla linii telefonicznej. Pobiera ona z bazy danych sklepu informacje o statusie przesyłki i zwraca odpowiedź do infolinii:
  • wyslana - jeżeli paczka została już wysłana
  • wstrzymana - jeżeli paczka została wstrzymana z ważnego powodu
  • namagazynie - jeżeli paczka jest aktualnie pakowana
  • platnosc - jeżeli paczka oczekuje na płatność
Zakładając, że strona jest widoczna pod adresem http://api.example.com/sklep/paczki.php, plan rozmowy może wyglądać następująco:.

graj(powitanie001)
menu
(
  zapowiedz_mow: Naciśnij 1, jeżeli chcesz sprawdzić stan swojej paczki. Naciśnij 0, 
  jeżeli chcesz połączyć się z konsultantem.
  ostrzegaj_mow: Zły wybór, spróbuj jeszcze raz.
  wybor: 0..1
  zapisz: $A
)
jezeli $A
  kiedy 0
    kolejka
    (
     nazwa: konsultanci
    )
  kiedy 1
    pobierz
    (
      mow: Proszę podać numer paczki i zakończyć krzyżykiem.
      ile: 8
      zakoncz: #
      zapisz: $B
    )
    http
    (
      url: http://api.example.com/sklep/paczki.php?id=$B
      zapisz: $C
      metoda: get
    )
    jezeli $C
      kiedy wyslana
        mow(Twoja paczka została wysłana. Wkrótce zostanie dostarczona przez kuriera.)
      kiedy namagazynie
        mow(Twoja paczka aktualnie jest pakowana. Wkrótce zostanie dostarczona do kuriera.)
      kiedy platnosc
        mow(Oczekujemy na twoją płatność. Jak tylko wpłata zostanie zaksięgowana na naszym koncie, 
        przejdziemy do realizacji zamówienia.)
      kiedy wstrzymana
        mow(Twoje zamówienie zostało wstrzymane. Za chwilę połączysz się z konsultantem 
        w ceku wyjaśnienia sprawy.)
        kolejka
        (
          nazwa: reklamacje
        )
      kiedy err
        mow(Wystąpił problem techniczny w trakcie sprawdzania twojego zamówienia. 
        Spróbuj później.)
      inaczej
        mow(Przykro nam. Takie zamówienie nie istnieje w naszym systemie.)
    koniec
koniec

Jeżeli dzwoniący wciśnie 1 w menu głównym zostanie przekierowany do automatu pytającego go o numer zamówienia (pobierz). Wpisany numer zamówienia zapisywany jest do zmiennej $B, która poprzez polecenie http przesyłana jest jako parametr id na wskazany URL. Odpowiedź z API zapisywana jest jako $C i w zależności od jej wartości wypowiadany jest inny komunikat. W przypadku, gdy zmienna $C równa jest wstrzymana następuje dodatkowo połączenie z działem reklamacji.

W razie problemów z połączeniem pomiędzy platformą Limtel.pl a twoim API polecenie http zapisze err do zmiennej $C. W ten sposób będziesz mógł odpowiednio obsłużyć taki błąd w swojej infolinii.

Porada

Twoja infolinia będzie dużo lepiej działać, jeżeli teksty dla mow() będą wpisane w planie rozmowy, a nie pobierane ze zmiennej zwróconej przez http(). Konstruuj swoje plany z wykorzystaniem jezeli..kiedy, tak jak w powyższym przykładzie, zamiast przekazywać zawartość zmiennej do mow().

Unikaj takich konstrukcji:
http
(
  url: http://api.example.com/res
  zapisz: $A
  metoda: get
)
mow($A)


Przykład 2: Teleankieta

UWAGA W pierwszym pytaniu używamy funkcji menu zamiast pobierz, żeby zawęzić wybór. W drugim musimy już użyć instrukcji warunkowej, ponieważ menu dopuszcza cyfry z przedziału 0..9.
menu
(
  zapowiedz_mow: Co głównie decyduje o wyborze szamponu przez Ciebie? 1 Cena, 2 Reklama TV, 
  3 Opinie w internecie.
  ostrzegaj_mow: Zły wybór, wybierz z klawiatury telefonu jeden, dwa lub trzy.
  wybor: 1..3
  zapisz: $A
)

powtarzaj

  pobierz
  (
    mow: Ile godzin dziennie spędzasz przed telewizorem? Wybierz na klawiaturze telefonu 
    cyfrę i naciśnij krzyżyk.
    ile: 3
    zapisz: $B
    zakoncz: #
  )

  jezeli $B
    kiedy 0..18
     powtarzaj_wyjdz
    inaczej
     mow(Czy na pewno? Odpowiedz jeszcze raz na pytanie.)
  koniec

powtarzaj_koniec

mow(Dziękujemy za wzięcie udziału w ankiecie.)

http
(
  url: http://example.com:5555/api.php
  metoda: post 
  param: q1=$A&q2=$B
  zapisz: $Z
)

Strona w PHP zbierająca wyniki mogłaby wyglądać następująco:

<php

$pobrana_informacja_numer_1 = $_GET[q1];
$pobrana_informacja_numer_2 = $_GET[q2];

$lista_wyboru = array( '1' => 'Odpowiedź 1', '2' => 'Odpowiedź 2');

echo "Pobrano Wynik dla kampanii: ".$pobrana_informacja_numer_1;
echo "Klient wybrał następującą odpowiedź: ".$lista_wyboru[$pobrana_informacja_numer_2];


?>

Bezpieczeństwo

Jeżeli chcesz szyfrować transmisję pomiędzy serwerami Limtel a swoim systemem, to w parametrze url polecenia http() zacznij od https://. Pamiętaj, że Twój serwer http musi wspierać protokół HTTPS dla domeny, z którą się łączysz.

Powinieneś też filtrować połączenia do swojego API tak, by tylko serwery Limtel mogły się do niego dostawać. Aktualnie zapytania mogą być wysyłane z następujących numerów IP:

78.133.250.196

Jeżeli adresy się zmienią, zostaniesz poinformowany o tym za pomocą email.