随着物聯網的普及,當裝置發生異常時候的通知方式也有了多種多樣的實作。從傳統的背景異常清單,到短信通知,到微信消息通知等。但是當裝置探測到火警異常時,需要實時通知到相關人員。
下面具體介紹如何借助阿裡雲的【語音服務】實作。
1. 準備工作
1.1 登入阿裡雲
語音服務,進行資質申請,需要準備好企業資訊,法人資訊以及加蓋企業公章的入網承諾書、号碼申請公函;
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yYyAjNwYjYjNTN2EDMyYmYwcTZ0kTY5MmNiZmYzImZh9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
1.2 資質申請通過後,就可以購買号碼了。
注1:目前隻能申請企業歸屬地所屬的号碼,比如企業是在杭州的,就不能購買上海的号碼段;
注2:因為阿裡雲接入的是移動聯通電信三大營運商,号碼段經常發生變化,在實際購買時可能存在号碼庫為空的場合,這種情況下建議下個工單給小二,催下進度;
注3:号碼是按月租費計算,實際通話費用按照撥打時間進行附加收費;
1.3 準備【文本轉語音模闆】;
注1:模闆内容和阿裡雲短信一樣,可以自己定義替換變量;
注2:文本輸入完成後,建議試聽一下,計算下時長,如果超過1分鐘後就按照2分鐘進行收費啦;
注3:可以自己選擇聲音類型,這個功能瞬間點贊;
2. 試試看效果
阿裡雲上的配置基本做好了,接下來就是如何嵌入我們的代碼啦。
2.1 重新梳理一下語音服務的流程。
2.2 整理好需要用到的阿裡雲參數資料。
2.2.1 $accessKeyId,$accessKeySecret(可通過
https://ak-console.aliyun.com頁面建立)
注:由于$accessKeyId,$accessKeySecret是阿裡雲全局的,比如短信,OSS等,請注意保管,必要時可以通過【建立子使用者accessKey】配置權限進行使用;
2.2.2 CalledShowNumber主叫号碼,即1.2中購買的号碼,用于接聽電話時顯示;
2.2.3 CalledNumber被叫号碼,僅支援中國大陸号碼。根據業務需求,設定需要處理該異常消息的人員電話;
2.2.4 TtsCode模闆ID,即1.3中配置好的模闆ID;
2.2.5 模闆中配置的參數值,比如$position(報警位址),$devicename(裝置名稱),$time(報警時間)
2.3 下載下傳
PHP的DEMO,另外,阿裡雲還支援
Java,
Python的位址,大家可以去試一下。
注:目前最新的
語音服務新版SDK源碼已經托管至開源平台Github及主流依賴倉庫
2.4 打開【aliyun-dyvms-php-sdkapi_demosingleCallByTts.php】,代入2.3中的各項參數。
ini_set("display_errors", "on");
require_once dirname(__DIR__) . '/api_sdk/vendor/autoload.php';
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Dyvms\Request\V20170525\SingleCallByTtsRequest;
// 加載區域結點配置
Config::load();
/**
* 文本轉語音外呼
*
* 語音服務API産品的DEMO程式,直接執行此檔案即可體驗語音服務産品API功能
* (隻需要将AK替換成開通了雲通信-語音服務産品功能的AK即可)
* 備注:Demo工程編碼采用UTF-8
*/
function singleCallByTts() {
//産品名稱:雲通信語音服務API産品,開發者無需替換
$product = "Dyvmsapi";
//産品域名,開發者無需替換
$domain = "dyvmsapi.aliyuncs.com";
// TODO 此處需要替換成開發者自己的AK (https://ak-console.aliyun.com/)
$accessKeyId = "$2.3.1準備的accessKeyId "; // AccessKeyId
$accessKeySecret = "$2.3.1準備的accessKeySecret"; // AccessKeySecret
// 暫時不支援多Region
$region = "cn-hangzhou";
// 服務結點
$endPointName = "cn-hangzhou";
//初始化acsClient,暫不支援region化
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
// 增加服務結點
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
// 初始化AcsClient用于發起請求
$acsClient = new DefaultAcsClient($profile);
//組裝請求對象-具體描述見控制台-文檔部分内容
$request = new SingleCallByTtsRequest();
//必填-被叫顯号
$request->setCalledShowNumber("$1.2購買的号碼");
//必填-被叫号碼
$request->setCalledNumber("$需要撥打的電話号碼");
//必填-Tts模闆Code
$request->setTtsCode("$1.3配置的模闆ID");
//選填-Tts模闆中的變量替換JSON,假如Tts模闆中存在變量,則此處必填
$request->setTtsParam("{\"position\":\"$杭州濱江濱興路500号\",\"devicename\":\"$煙感\",\"time\":\"$9:10\"}");
//選填-音量
$request->setVolume(100);
//選填-播放次數
$request->setPlayTimes(3);
//選填-外呼流水号
$request->setOutId("213123123");
//hint 此處可能會抛出異常,注意catch
$response = $acsClient->getAcsResponse($request);
return $response;
}
// 調用示例:
set_time_limit(0);
header("Content-Type: text/plain; charset=utf-8");
$response = singleCallByTts();
echo "文本轉語音外呼(singleCallByTts)接口傳回的結果:\n";
print_r($response);
2.5 執行後的頁面輸出如下:
文本轉語音外呼(singleCallByTts)接口傳回的結果:
stdClass Object
(
[Message] => OK
[RequestId] => 9F9310B3-4390-44B9-89B5-C33A907A282D
[Code] => OK
[CallId] => 118407437815^105205032815
)
2.6 耐心等待幾秒鐘,被撥打的電話号碼就會收到一條來電,根據我們的參數配置會循環3遍提示。
【您位于杭州濱江濱興路500号的煙感在9:10疑似火警,請您及時确認以免造成人員及财産損失】
大家也可以試聽下實際的
通話錄音3. 總結
通過阿裡雲的語音服務,幫助我們能夠快速搭建異常通知系統。這裡隻是介紹其中最簡單的一種應用,實際上還有【語音驗證碼】【智能外呼機器人】等功能,對于擁有自有線路的使用者,還可以SIP Trunk的接入方式将語音網關與語音服務平台進行對接。
我們現在主要在以下場景進行了應用:
- 火警
- 電網裝置報警
- 物業費用等電話催繳通知
- 會員服務續費到期通知
最後小小吐槽下,希望提供阿裡雲語音服務的營運商線路能夠穩定些,不要老是進行切換。