一個項目中,客戶要求實現給集團公司員工發送短信如,拜年短信等。另,支持給領導發送語音短信。實現方法如下。
1、群發短信有幾種方式:
1.1 短信貓: 一個普通的工控機,插入SIM卡,可以通過接口的方式發送短信,點對點發送,到達率快准確,但是呼出的號碼是普通的手機號碼。 缺點:移動對SIM卡的限制是每小時200條,發送太多會鎖卡。 目前短信貓有8端口的,即1小時最多能發送1600條。每條短信的價格為0.1元。 技術實現:一般配合短信貓有SDK組件,才共享數據庫作為接口。定義4個表:待發送表,發送成功表,發送失敗表,消息接收表(系統可接收和處理短信用戶發送的短信,進行雙向互動)。
1.2 SP方式:有專門做短信的SP廠商提供各種接口,只需要調用就可以,達到率看你申請的是何種業務,也可以保證你呼出的是一特服號,不需要購買任何設備,適合於提供公用信息的業務,目標號碼不確定。具體發送費用需要跟sp廠商談判,據說最便宜的能談到4分錢。
在此,譴責一下SP廠商對垃圾短信的放任。
1.3 移動企信通 :一個工控機,移動提供的。有特服號,到達率都很高,但是有發送人員白名單的限制,適合企業內部使用。移動提供SDK開發包,具體費用根據短信數量采用對應的包月模式,發送費用5分錢。 這是我們准備采用的方式。
2、群發語音短信
聯系SP廠商,可采用租用坐席方式做外呼,只播放語音。廠商提供接口,上傳wav文件和發送人員列表到服務器。
語音短信開發中,涉及到如何將錄入的文字朗讀出來並保存為wav文件,即TTS。項目中采用微軟的SAPI 5開發步驟如下:
1. 下載SAPI SDK 和語言包(支持中文和日語):
SAPI 5 SDK: http://download.microsoft.com/download/speechSDK/SDK/5.1/WXP/EN-US/speechsdk51.exe
語言包: http://download.microsoft.com/download/speechSDK/SDK/5.1/WXP/EN-US/speechsdk51LangPack.exe
2. 通讀 陳本峰 的文章 : .Net平台下開發中文語音應用程序 http://www.microsoft.com/china/community/program/originalarticles/TechDoc/Cnspeech.mspx
其中Com組件導入,可以采用Visual Studio的導入Com組件界面完成。
代碼如下
代碼來自 : 陳本峰
//朗讀
private void buttonSynthesis_Click(object sender, System.EventArgs e)
{
try
{
SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice Voice = new SpVoice();
Voice.Speak(this.textBoxText.Text, SpFlags);
}
catch(Exception er)
{
MessageBox.Show("An Error Occured!","SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//生成聲音文件(Wav)
private void buttonTTStoWave_Click(object sender, System.EventArgs e)
{
try
{
SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice Voice = new SpVoice();
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
sfd.Title = "Save to a wave file";
sfd.FilterIndex = 2;
sfd.RestoreDirectory = true;
if (sfd.ShowDialog()== DialogResult.OK)
{
SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
SpFileStream SpFileStream = new SpFileStream();
SpFileStream.Open(sfd.FileName, SpFileMode, false);
Voice.AudioOutputStream = SpFileStream;
Voice.Speak(txtSpeakText.Text, SpFlags);
Voice.WaitUntilDone(Timeout.Infinite);
SpFileStream.Close();
}
}
catch(Exception er)
{
MessageBox.Show("An Error Occured!","SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
3. 采用文章中方法後,我們遇到了問題,系統只能朗讀英文,不支持中文朗讀。解決方法,定義SpVoice對象的Voice屬性為中文類型。
ISpeechObjectTokens tokens = voice.GetVoices(string.Empty, string.Empty);
int index = GetChineseVoiceIndex(tokens);
voice.Voice = tokens.Item(index);
簡單的語音短信就生成了。