Python調(diào)用阿里云呼叫中心

前言

在工作中需要接入一個(gè)外呼平臺(tái)术裸,之前接過一個(gè)小公司的外呼,無論是文檔還是鑒權(quán)都存在著不少的問題亭枷,通話記錄的獲取則需要使用RabbitMQ實(shí)現(xiàn)延遲隊(duì)列來獲取袭艺,存在著不穩(wěn)定的問題。在使用了一周之后客戶想要打哪顯哪的功能叨粘,就指名使用阿里云云呼叫中心猾编。

起初,看見阿里云上完善的文檔升敲,以及openAPI的在線測試答倡,覺得這個(gè)應(yīng)該是一件很輕松的事情。滿心歡喜的就接上了這活驴党,在開發(fā)過程以及不斷閱讀文檔的過程中瘪撇,發(fā)現(xiàn)阿里云上的SDK對(duì)Python很是不友好,尤其是aliyun-open-sdk-ccc這個(gè)用于云呼叫中心的SDK港庄,作用極其有限倔既。

由于開發(fā)過程中發(fā)現(xiàn)網(wǎng)上幾乎沒有Python調(diào)用阿里云呼叫中心的博客,而且太多博客都是重復(fù)或者語焉不詳鹏氧。所以斗膽自己寫一篇渤涌。

AK or BEARERTOKEN

AK

AK代表可以使用云呼叫中心的SDK使用AK請(qǐng)求“鸦梗看上去還是挺方便实蓬,只需要提供阿里云子賬戶的AK和AK secret茸俭,這些請(qǐng)求代碼幾乎可以直接copy阿里云上OpenAPI的在線調(diào)試工具上的代碼就能實(shí)現(xiàn)了。

但是實(shí)際使用過程中安皱,發(fā)現(xiàn)這里面的坑著實(shí)不小调鬓。

首先如前言中的圖所示,接口的調(diào)用僅部分能通過AK+aliyun-open-sdk-ccc調(diào)用练俐,對(duì)于不支持這種方式認(rèn)證的接口袖迎,會(huì)直接報(bào)出403的錯(cuò)誤。其次腺晾,有很多文檔中提及到的接口,如ListOutboundPhoneNumberOfUser等不少接口辜贵,在SDK中已經(jīng)找不到了悯蝉,如果按照OpenAPI的調(diào)用代碼,導(dǎo)入時(shí)會(huì)報(bào)錯(cuò)托慨。

BEARERTOKEN

初看文檔時(shí)鼻由,被使用BEARERTOKEN的步驟給嚇到了,所以選擇跳入了SDK的坑厚棵。

首先文檔中會(huì)說到要使用OAuth2單點(diǎn)登錄蕉世,第一眼看到時(shí)就覺得很復(fù)雜。

demo還只有Java的婆硬,可見阿里云對(duì)Java的使用度遠(yuǎn)遠(yuǎn)大于Python狠轻。文檔地址

第一步 獲取授權(quán)碼

在這一步中沒什么坑,只需要照著文檔彬犯,向目標(biāo)URL發(fā)起請(qǐng)求即可向楼。需注意的是redirect_uri需要提前配置在創(chuàng)建的云呼叫中心應(yīng)用中。然后使用創(chuàng)建的應(yīng)用的ID請(qǐng)求即可返回到redirect_uri并在路徑中添加了code授權(quán)碼谐区。

第二步 獲取Token

照著文檔即可湖蜕。(阿里云的這些文檔還是挺好的)

此處的Token返回有兩種,一種是access_token用于登錄宋列,一種是refresh_token昭抒。

這個(gè)時(shí)候就會(huì)有一個(gè)關(guān)于access_token的問題,后文會(huì)提及到炼杖。

access_token是用來調(diào)用API時(shí)驗(yàn)證身份的灭返,時(shí)限有限一般在1-3個(gè)小時(shí)。refresh_token的時(shí)限較長嘹叫,一般1-2年婆殿,當(dāng)access_token過期后,用該token再去請(qǐng)求回新的access_token罩扇。

以上兩步為關(guān)鍵的獲取BEARERTOKEN的步驟婆芦。不知道該說阿里的鑒權(quán)優(yōu)秀還是說太過麻煩了怕磨。

使用AK

使用AK太多問題了。不僅是創(chuàng)建時(shí)必須記錄好Access_Key_Secret消约,調(diào)用接口的范圍很小肠鲫,太多接口無法使用。已放棄或粮,如果有大佬發(fā)現(xiàn)了Python使用該SDK能帶著Token去請(qǐng)求的話导饲,希望能分享一下。

使用BEAERTOKEN

在經(jīng)歷了一周對(duì)SDK的閱讀之后氯材,放棄了使用云呼叫中心的SDK渣锦,而是使用Python的基礎(chǔ)SDK中的CommonRequest自己向阿里云的接口發(fā)起請(qǐng)求。

如何使用BEARERTOKEN

最開始氢哮,我以為只需要將獲取到的access_token代入進(jìn)請(qǐng)求中即可袋毙,后來發(fā)現(xiàn)是我自己對(duì)文檔的閱讀不夠仔細(xì)。

access_token是一組進(jìn)行過URLBase64加密的字符串冗尤,使用時(shí)需要將其解碼听盖。


def base64_url_decode(inp):
    padding_factor = (4 - len(inp) % 4) % 4
    inp += "=" * padding_factor
    return base64.b64decode(unicode(inp).translate(dict(zip(map(ord, u'-_'), u'+/'))))</pre>

解碼之后即可發(fā)現(xiàn),access_token其實(shí)是由一組access_key_id裂七、access_key_secret以及security_token組成的皆看。

構(gòu)建請(qǐng)求

from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
request = CommonRequest()
request.set_domain("ccc.cn-shanghai.aliyuncs.com")
request.set_version('2017-07-05')
request.set_accept_format('json')

access_key_id = '解碼access_token獲得'
access_key_secret = '解碼access_token獲得'
security_token = '解碼access_token獲得'

client = AcsClient(ak=access_key_id, secret=access_key_secret, region_id='創(chuàng)建呼叫中心實(shí)例時(shí)選擇的')

request.set_action_name('需要發(fā)起的請(qǐng)求,對(duì)應(yīng)文檔中的請(qǐng)求名')
request.add_query_param('SecurityToken', security_token)
request.add_query_param('請(qǐng)求所需要的字段', '對(duì)應(yīng)字段的值') # 可能會(huì)有很多個(gè)

response = client.do_action_with_exception(request)

以上就完成了一個(gè)基本的請(qǐng)求的構(gòu)建背零。

最后

雖然使用了BEARERTOKEN,但有些請(qǐng)求確實(shí)已經(jīng)從阿里云上移除了腰吟,調(diào)用的時(shí)候會(huì)報(bào)出404的錯(cuò)誤。希望阿里996的工程師們抽空還是更新一下文檔吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捉兴,一起剝皮案震驚了整個(gè)濱河市蝎困,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌倍啥,老刑警劉巖禾乘,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虽缕,居然都是意外死亡始藕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門氮趋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伍派,“玉大人,你說我怎么就攤上這事剩胁∷咧玻” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵昵观,是天一觀的道長晾腔。 經(jīng)常有香客問我舌稀,道長,這世上最難降的妖魔是什么灼擂? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任壁查,我火速辦了婚禮,結(jié)果婚禮上剔应,老公的妹妹穿的比我還像新娘睡腿。我一直安慰自己,他們只是感情好峻贮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布席怪。 她就那樣靜靜地躺著,像睡著了一般月洛。 火紅的嫁衣襯著肌膚如雪何恶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天嚼黔,我揣著相機(jī)與錄音,去河邊找鬼惜辑。 笑死唬涧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盛撑。 我是一名探鬼主播碎节,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抵卫!你這毒婦竟也來了狮荔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤介粘,失蹤者是張志新(化名)和其女友劉穎殖氏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姻采,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雅采,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慨亲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婚瓜。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刑棵,靈堂內(nèi)的尸體忽然破棺而出巴刻,到底是詐尸還是另有隱情,我是刑警寧澤蛉签,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布胡陪,位于F島的核電站沥寥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏督弓。R本人自食惡果不足惜营曼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愚隧。 院中可真熱鬧蒂阱,春花似錦、人聲如沸狂塘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荞胡。三九已至妈踊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泪漂,已是汗流浹背廊营。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萝勤,地道東北人露筒。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像敌卓,于是被迫代替她去往敵國和親慎式。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容