BulutfonXM ile örnek anket uygulaması için örnek kod ve açıklamalar verilmektedir. Telefon numarası üzerinden nasıl anket yapılacağı anlatılmaktadır.

Kod’a geçmeden önce kullanıdığımız Bulutfon servislerini açıklayalım:

BFON (BULUTFON OBJECT NOTATİON)

Bulutfon’un geliştirip standartlarını belirlediği json formatıdır. Örnek olarak formatı şu şekilde verebiliriz:

{
    "seq": [
        {
            "action": "reject"
        },
        {
            "action": "play",
            "args": {
                "url": "http://192.168.1.1:8000/test.mp3"
            }
        },
        {
            "action": "gather",
            "args": {
                "min_digits": "2",
                "max_digits": "5",
                "max_attempts": "3",
                "ask": "http://192.168.1.1:8000/test.mp3",
                "play_on_error": "http://192.168.1.1:8000/test.mp3",
                "variable_name": "testvar"
            }
        },
        {
            "action": "dial",
            "args": {
                "destination": "1000"
            }
        } 
    ]
 }

BFXM(BULUTFON EXTERNAL MANAGER)

Bulutfon, harici bir web sunucusundan BFON formatında alacağı direktif dosyaları ile pbx davranışlarını düzenleyebilir. Bu özelliğe BFXM diyoruz.

Kullanıcılar, panellerindeki uygulamalar menüsünden yeni bir BFXM oluşturup, çağrı geldiği anda kendi belirledikleri bir urlye istek yaptırabilirler. İstek bir HTTP POST isteğidir. Kullanıcı diler ise bu isteğin HTTP Basic Auth olarak yapılmasını sağlayabilir.

POST isteğinde BFXM şu parametreleri gönderir.

  • “uuid” : Çağrı için universally unique identifier. Bu değer daha sonra raporlamalarda çağrıyı bulmak için de kullanılabilir.
  • “caller” : Çağrıyı başlatan numara
  • “callee” : Çağrıyı alan numara
  • “step” : İterasyon işlemlerinde adım sayısı

BFXM in web sunucudan beklediği örnek BFON dökümanı şu şekilde olabilir. Response ile birlikte döndürülen BFON’un (json) bütün parametreleri tam ve eksiksiz olarak doldurulmalıdır.

Ayrıca Bulutfon servisleri dışında kullandığım python flask micro-framework bahsedecek olursak:

FLASK

Python web uygulamalarımızı yapmayı sağlayan, hızlı öğrenebileceğiniz, komplike yapılarla uğraşmadan hızlı uygulama çıkarabileceğiniz bir micro-framework tür.

Yapacağımız uygulama BFON formatında oluşturacağımız jsona dayanıyor. BFON formatında anket uygulaması için kullanacağımız tag gather olucaktır:

gather

Kullanıcıdan bir girdi tuşlatır. Gather methodu kullanıldığında, BFON dosyasının tamamı işlenince, sistem tekrar istek yapar ve istekte cevabın atandığı değişken de post edilir. Bu istekte step değişleni bir artırılarak gelir.

Parametreleri

  • min_digits : En az tuşlanacak sayı adedi
  • max_digits : En çok tuşlanacak sayı adedi
  • max_attempts : En fazla hata adedi
  • ask : Sorulacak sorunun mp3 ses kaydı urlsi.
  • play_on_error : Hata durumunda çalınacak mp3 ses kaydı urlsi.
  • variable_name : verilen cevabın atanacağı değişken.

Uygulamaya başlamadan önce https://oim.bulutfon.com/account/pbx-settings/custom-pbxes/new adresinde yeni BulutfonXM uygulamamızı oluşturuyoruz, url olarak ben localde ngrok çalıştırarak ngrok urlesini verebiliriz. Daha sonra santral numaraları kısmına gelerek numarayı düzenle diyerek

hedef olarak oluşturduğumuz BulutfonXM uygulamasını kaydediyoruz.

Yukardaki işlemler ile birlikte artık hedefini BulutfonXM olarak düzenlediğimiz numaranın anlık çağrı yönetimini python flask kullanarak yazdığımız uygulamamız üzerinden yapabiliriz.

Bu uygulamayı çalıştırabilmek için flask micro-framework kurulumunu gerçekleştirmeniz gereklidir.

İlk olarak gerekli kütüphaneleri import ediyoruz.

from flask import Flask,request,jsonify

app = Flask(__name__)


Route oluşturuyoruz post isteklerine açık bir şekilde

@app.route('/', methods=['POST'])

Çağrı başladığında çalışacak senaryoyu oluşturuyoruz.

Bulutfonun bfon formatında çağrıyı action: gather olarak tuşlamaları yakalayabilmek için oluşturuyoruz.

gather özelliği hakkında bilgi için https://github.com/bulutfon/documents/blob/master/BFXM/BFON.md#gather

linkinden değişkenler hakkında bilgi alabilirsiniz.

def survey():
	if request.form['step'] == '1':
		ret_val = {   "bfxm" : {
						  "version" : 1
						},
				   "seq" : [
					{
						"action" : "gather",
						"args" : {
						    "min_digits": "3",
						    "max_digits": "3",
						    "max_attempts": "3",          
                                      "ask":"https://example.mp3",
					"play_on_error":"https://example.mp3",
					"variable_name": "surveyvar"
				                }
			            }
		              ]
	               }
		return jsonify(ret_val), 200

Çağrı senaryosu tamamlandıktan sonra,çağrıyı kapatıp(action: hangup) girilen tuşları atağımız surveyvar çekip dosyaya yazıyoruz.

	else:
		ret_val = {
					  "bfxm" : {
							    "version" : 1
							  },
							  "seq" : [
							    {
							      "action" : "hangup"
							    }
							  ]
					}
		file = open("survey.txt", "w")
		survey_var = "Aranan numara => "+ request.form['callee'] + "     Basilan tuslar =>" + request.form['surveyvar']
		file.write(survey_var)
		file.close
		return jsonify(ret_val), 200

Dosyada örnek olarak şu şekilde;

Aranan numara => 908508850000 Basilan tuslar => 235

BulutfonXM ile örnek anket uygulaması hakkında daha fazla bilgi için API dokümantasyonumuzu inceleyebilirsiniz.

https://www.bulutfon.com/api-entegrasyon/

http://api.bulutfon.com/docs

Geliştirici forumumuza katılarak geliştirme ekibimize ulaşabilirsiniz.

https://devforums.bulutfon.com/

Yorum Yap