微信平臺技術(shù)實(shí)操(10):公眾賬號自定義回復(fù)

2017-02-24|HiShop
導(dǎo)讀:官方其實(shí)并不推薦經(jīng)常群發(fā)消息,更多的是希望用戶通過對話來自己獲取服務(wù)或者進(jìn)行搜索。今天我們就講下如何使用開發(fā)模式做自定義回復(fù)。 目前公眾賬號可以接收的用戶提交消息請...

  官方其實(shí)并不推薦經(jīng)常群發(fā)消息,更多的是希望用戶通過對話來自己獲取服務(wù)或者進(jìn)行搜索。今天我們就講下如何使用開發(fā)模式做自定義回復(fù)。

  目前公眾賬號可以接收的用戶提交消息請求有四種類型,分別是文字、圖片、地理位置和鏈接,而公眾賬號回復(fù)只有三種格式,文字、圖文和音樂,也就是說用戶互動的模式最多也就是12種,我們今天先講三種即文字回復(fù)文字、文字回復(fù)圖文、文字回復(fù)音樂。

  這強(qiáng)調(diào)一下,微信的消息接口通訊有效時間是5秒,也就是說網(wǎng)絡(luò)不穩(wěn)定等原因很容易造成用戶在5秒內(nèi)接收不到回復(fù)消息,然后就通訊中斷了,這幾天有人反映關(guān)注ZTalk后沒有消息提示就是這個問題。

  一、文字回復(fù)文字之鸚鵡學(xué)舌

  鸚鵡學(xué)舌大家都知道,就是你說什么它跟著你說什么,咱們也可以在微信公眾平臺里玩一下,首先進(jìn)入SAE平臺,打開代碼編輯,在之前的接口文件上進(jìn)行修改。代碼如圖:

  

微信平臺技術(shù)實(shí)操(10):公眾賬號自定義回復(fù)

 

  代碼添加位置是在“事件消息”的注釋前面,用戶消息賦值之后,實(shí)際添加的代碼是從圖上20行開始到41行。

  第21行是判斷用戶發(fā)送的消息類型是否文字消息,可以參考事件消息的判斷,變動的只是消息類型標(biāo)示。

  第24行是判斷如果用戶發(fā)送了文字消息,那么獲取用戶發(fā)送的文字消息內(nèi)容賦值給變量$form_Content 。

  PS:這里有個函數(shù)“trim”,大家可以查下php的函數(shù)手冊,這個函數(shù)作用是去除字符串首尾的空格,有時候用戶誤在頭尾多敲了空格,如果不去除的話就會出現(xiàn)關(guān)鍵字無法匹配,比如“你好 ”如果不去掉尾部空格就無法匹配關(guān)鍵字“你好”。

  第26行是判斷用戶發(fā)送的消息內(nèi)容是否為空,可以參照第9行的邏輯,empty($form_Content)在$form_Content不為空的時候返回0,為空的時候返回1,非(!)0即1表示條件成立,用戶發(fā)送的消息是有內(nèi)容的。

  第28行到第31行就是完成回復(fù)文字消息的功能,其中回復(fù)的內(nèi)容直接用了$form_Content,也就是把用戶發(fā)送的內(nèi)容又給回復(fù)回去。

  第34行是如果用戶發(fā)送的內(nèi)容為空白,則返回輸入提示。因此第37行的回復(fù)消息就是”請輸入些什么吧……”。

  好了現(xiàn)在去測試下,當(dāng)你向公眾賬號輸入文字時,公眾賬號就會回復(fù)同樣的內(nèi)容給你,當(dāng)然你也可以把$form_Content改成直接的字符串,這樣就是自動回復(fù)了。

  二、文字回復(fù)圖文之餐館菜單

  有多少人能馬上說出編輯模式里最多能設(shè)多少個關(guān)鍵字?估計(jì)不多,當(dāng)然用心看我教程的應(yīng)該知道,是200個,到了開發(fā)模式這個關(guān)鍵字其實(shí)是無限的,前面舉了文字回復(fù)文字的簡單例子,現(xiàn)在加點(diǎn)難度,可以識別關(guān)鍵字并且回復(fù)的是圖文消息,咱們就拿菜單來做例子吧,先做菜譜的類別,這個我們用文字回復(fù),代碼如圖下:

  

微信平臺技術(shù)實(shí)操(10):公眾賬號自定義回復(fù)

 

  添加的代碼位置在判斷用戶發(fā)送消息不為空的條件判斷之后,默認(rèn)回復(fù)之前,這里大家注意下默認(rèn)回復(fù)其實(shí)就是將前面文字回復(fù)文字的變量用字符串代替了。增加的代碼從第29行開始到41行。

  第30行判斷用戶發(fā)送過來的消息是否為“菜譜”,這里注意判斷是否等于是用兩個“=”號。如果是則運(yùn)行該判斷條件下的代碼。

  第33行先賦值給$return_str一個初始字符串點(diǎn)菜提示“請輸入字母編碼瀏覽相應(yīng)菜品:”,我這里加了兩個表示空兩行。

  第34行是一個數(shù)組,數(shù)組的元素為菜譜的類別。

  數(shù)組在程序中使用非常普遍,它是一種把具有相同類型的若干變量、數(shù)字或者字符串,有序組織起來的一種形式,有點(diǎn)像咱們以前數(shù)學(xué)課教的集合概念。

  數(shù)組的每個元素都是由鍵和值關(guān)聯(lián)組成,我在例子里的定義方式鍵值會默認(rèn)生成,第一個元素的鍵值為0,元素值是“lc.冷菜”,數(shù)組的每個元素值可以使用“數(shù)組名[鍵值]”的方式獲取或者輸出,比如$return_arr[0]的值就是“lc.冷菜”。

  數(shù)組可以用來做數(shù)據(jù)的存儲、排序、檢索等,它的概念比較復(fù)雜但是很重要,希望大家能夠去看些資料認(rèn)真學(xué)習(xí)下。

  第35行是用implode函數(shù)將$return_arr轉(zhuǎn)化成字符串,然后加到之前賦值過的$return_str后面,其運(yùn)行結(jié)果為:

  “請輸入字母編碼瀏覽相應(yīng)菜品:lc.冷菜hb.杭幫菜sk.燒烤wp.外婆燒ml.麻辣rc.熱菜tp.甜品”。

  implode函數(shù)的使用方法為implode(分隔符,數(shù)組),將數(shù)組內(nèi)元素轉(zhuǎn)化成字符串,并將分隔符插入元素之間,我在例子里分隔符為空值,所以最后轉(zhuǎn)化的字符串是首尾相連中間沒有分隔符的。

  后面的就不解釋了,輸出文字消息同時退出運(yùn)行。

  接著我們來示例某個類別的詳細(xì)菜單,咱們用多圖文消息來做,靈光的朋友已經(jīng)想到了,呵呵,先寫一個判斷,然后把那段用戶關(guān)注回復(fù)多圖文消息的代碼拷貝過來修改下就好了。當(dāng)然我今天加了點(diǎn)料,示例如下:

  

微信平臺技術(shù)實(shí)操(10):公眾賬號自定義回復(fù)

 

  添加的代碼位置在菜譜的大括號后面。第42行到51行和之前的是一樣的,唯一不同的是ArticleCount我設(shè)置成了10,也就是圖文消息條數(shù)為10條(編輯模式里多圖文消息最多只有8條,開發(fā)模式里是10條),不清楚的可以看第十期教程,我直接講下改進(jìn)的部分。

  第53行到105行我定義了一個數(shù)組$return_arr,這個數(shù)組里共有10個元素,每個元素又是一個結(jié)構(gòu)相同的數(shù)組,這些數(shù)組都有三個元素分別對應(yīng)標(biāo)題、圖片和鏈接,為了偷懶,我9個列表消息只是換了標(biāo)題,沒有圖片和連接,不知道大家看明白沒有。

  這個數(shù)組其實(shí)就相當(dāng)于我把菜單的10道菜里不同的數(shù)據(jù)按照相同的結(jié)構(gòu)做了集合,然后使用一個循環(huán)讀取語句將這些數(shù)據(jù)拼接成將要輸出的圖文消息。

  第107行的foreach是一個將數(shù)組中每個元素按照鍵值順序遍歷一遍的函數(shù),通俗的說就是將$return_arr這個數(shù)組里的元素按照先后順序讀取出來,每次讀取一個元素,讀取出來的元素賦值給$value,所以這個$value的值會隨著每次循環(huán)改變。即第一次循環(huán)時$value=$return_arr[0],第二次循環(huán)時$value=$return_arr[1]……

  每次讀取的$value其實(shí)就是$return_arr一個元素,根據(jù)上面的數(shù)據(jù)結(jié)構(gòu)這個元素又是一個數(shù)組,里面有三個元素,分別對應(yīng)了標(biāo)題、圖片和鏈接,值是$value[0]、$value[1]、$value[2],將這三個數(shù)據(jù)拼接到圖文消息模板,同時與前一次的$resultStr拼接。這樣做的好處在于減少了代碼的長度,把圖文消息模板復(fù)用了,另外這個數(shù)組的結(jié)構(gòu)其實(shí)跟數(shù)據(jù)庫里讀取出來的結(jié)構(gòu)是一樣的,所以也是想讓大家一點(diǎn)點(diǎn)熟悉起來。

  等循環(huán)結(jié)束就執(zhí)行第116行,完成最后的閉合拼接,然后輸出結(jié)果。公眾賬號就將這個包含10條菜品的圖文消息發(fā)送給了用戶。

  三、文字回復(fù)音樂之表情傳意

  很多人,真的很多人,幾乎每天都有人在公眾平臺上問我同一個問題,就是你怎么可以放超過60秒的歌曲,我的答案只有一個,就是用開發(fā)模式的音樂消息回復(fù)接口實(shí)現(xiàn)的。今天就給大家介紹下如何使用音樂接口來回復(fù)用戶消息,讓用戶有好的欣賞體驗(yàn)。

  回復(fù)音樂消息里的音樂是以鏈接形式加載到回復(fù)數(shù)據(jù)模板里的,類似咱們回復(fù)圖文消息里的圖片鏈接,SO,我們音樂文件的鏈接獲取也參照圖片連接方式,一種呢是找網(wǎng)上在線收聽的鏈接,不過真不是很保險(xiǎn),很多是防盜鏈的,比圖片還嚴(yán)格,另外一種呢就是放到云存儲平臺上,這里建議大家如果要把音樂做成常態(tài)功能,必須選擇專業(yè)的云存儲平臺,比如又拍云、七牛。

  今天我圖個方便就還是上傳到了SAE的Storage里了,如下圖,我選了我的大愛曲婉婷成名曲《我的歌聲里》(偷偷顯擺下,曲婉婷跟我在微博上可是互相關(guān)注的噢,我是她第3729個粉絲!!)。

  

微信平臺技術(shù)實(shí)操(10):公眾賬號自定義回復(fù)

 

  這個消息回復(fù)里支持的音樂格式目前我只測試過MP3、AAC兩個,肯定是沒有問題的,這里需要注意的是上傳的文件名必須用英文或數(shù)字,文件名里不要有中文、空格、單雙引號等,大小寫無所謂。如果資源允許可以上傳一個低碼率的音樂文件,再上傳一個高碼率的音樂文件,因?yàn)槲⑿爬锫犚魳窌詣幼R別網(wǎng)絡(luò)環(huán)境選擇不同音質(zhì)的版本。

  音樂文件準(zhǔn)備好后咱們就上代碼了吧!我這里給的例子是用戶發(fā)送表情,公眾賬號回復(fù)歌曲,如圖所示:

  

微信平臺技術(shù)實(shí)操(10):公眾賬號自定義回復(fù)

 

  增加的代碼加到前面菜單的代碼后面就行了,只要在那個默認(rèn)回復(fù)之前都可以。

  第124行代碼是判斷用戶發(fā)送的表情是不是微笑。就是微信表情第一排第一個,這里大家肯定會很奇怪微笑表情符號不是“[微笑]”嗎,老賊我最早也犯過這個錯,折騰半天才發(fā)現(xiàn)其實(shí)微信接口發(fā)送過來的表情代碼是這樣的。

  第127行這里是消息類型,音樂消息的類型是music。

  第128行到137行就是調(diào)用wx_tpl.php里的音樂消息模板,用sprintf將格式化的數(shù)據(jù)寫入到變量中去。

  后面就是輸出到用戶手機(jī)上,用戶接收到的就是音樂播放器,點(diǎn)擊播放鍵就可以欣賞音樂了,是不是很簡單?

  ZTalk秘籍

  如何收集所有表情的代碼呢?在第10期教程里有個秘籍是讓大家調(diào)試接口時可以把輸出結(jié)果文件保存到Storage上,然后查看文件檢查程序是否正常。咱們就用這個法子抓取所有表情的代碼。

  把抓取表情的代碼放到這個位置:

  

微信平臺技術(shù)實(shí)操(10):公眾賬號自定義回復(fù)

 

  然后到手機(jī)上往公眾平臺上發(fā)表情,按照順序從第一個一直輸入到最后一個,然后一起發(fā)送,然后你到Storage就會看到有bq.txt,打開后就能看到如下圖:

  

微信平臺技術(shù)實(shí)操(10):公眾賬號自定義回復(fù)

 

  這些就是真正的表情符號,我這里就發(fā)了第一屏幕的,大家抓取完就把代碼都刪除了吧,否則這里有個結(jié)束語句在那里,不去掉就不會執(zhí)行后面的程序。

TAGS:
推薦閱讀