你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure 通信服务调用 SDK,向启用了 PSTN 的应用程序添加紧急呼叫。
重要
Azure 通信服务仅支持拨打美国、波多黎各、加拿大、丹麦、英国和澳大利亚的紧急号码。
Azure 通信服务的语音呼叫 (PSTN) 功能可用于拨打美国、波多黎各和加拿大的紧急号码 911,丹麦的紧急号码 112,澳大利亚的紧急号码 000,以及英国的紧急号码 999 和 112。 Azure 通信服务目前不支持从这些国家或地区之外拨打这些紧急号码,也不支持拨打其他国家或地区的紧急服务。
先决条件
- 正常工作的通信服务通话 Web 应用
重要注意事项
你的应用程序可能要求能够拨打紧急号码并接听回电。 请向法律顾问核实紧急呼叫要求。
Microsoft 根据 ISO 3166-1 alpha-2 标准使用国家/地区代码。
支持的 ISO 代码仅包括美国 (美国)、PR (波多黎各)、CA (加拿大)、GB (英国)、DK(丹麦)。
如果未向 Azure 通信服务呼叫 SDK 提供国家/地区 ISO 代码,Microsoft 将使用 IP 地址来确定呼叫者的国家或地区。
如果 IP 地址无法提供可靠的地理位置(例如用户使用虚拟专用网),则需要使用呼叫 SDK 中的 API 来设置呼叫国家/地区的 ISO 代码。
如果用户从美国领土(例如关岛、美属维尔京群岛、北马里亚纳群岛或美属萨摩亚)拨打电话,则需要将 ISO 代码设置为 US。
紧急拨号超出了 Azure 通信服务直接路由的范围。
有关 Azure 通信服务中紧急服务的计费信息,请参阅定价页。
设置用于测试的按钮
将 index.html 中的代码替换为以下代码片段。 这会添加一个新的按钮,用于测试紧急呼叫。
<!DOCTYPE html>
<html>
<head>
<title>Communication Client - Calling Sample</title>
</head>
<body>
<h4>Azure Communication Services</h4>
<h1>Calling Quickstart</h1>
<input
id="callee-phone-input"
type="text"
placeholder="Who would you like to call?"
style="margin-bottom:1em; width: 230px;"
/>
<div>
<button id="call-phone-button" type="button">
Start Call
</button>
<button id="hang-up-phone-button" type="button" disabled="true">
Hang Up
</button>
<button id="emergency-button" type="button">
933 Test Call
</button>
</div>
<script src="./bundle.js"></script>
</body>
</html>
指定国家或地区
指定呼叫方所在的国家/地区的 ISO 代码。 有关支持的 ISO 代码列表,请参阅有关紧急呼叫的概念性文章。
在 client.js 文件中添加以下代码,以检索你在 index.html 中创建的紧急按钮。
const emergencyButton = document.getElementById("emergency-button");
替换 init
函数,以在创建 callAgent
期间添加一个字段来指定紧急国家/地区:
async function init() {
const callClient = new CallClient();
const tokenCredential = new AzureCommunicationTokenCredential('<USER ACCESS TOKEN with PSTN scope>');
callAgent = await callClient.createCallAgent(tokenCredential, {
emergencyCallOptions: {"countryCode": "<COUNTRY CODE>"}
});
// callPhoneButton.disabled = false;
}
向呼叫按钮添加功能
将以下代码添加到 client.js 文件,以向紧急呼叫按钮添加相应功能。 无论你是否提供 alternateCallerId
参数,都会为你的紧急呼叫分配临时呼叫方 ID。
emergencyButton.addEventListener("click", () => {
const phoneToCall = "933";
call = callAgent.startCall(
[{phoneNumber: phoneToCall}]);
// toggle button states
hangUpPhoneButton.disabled = false;
callPhoneButton.disabled = true;
});
重要
933 是测试调用服务。 你可以使用它来测试紧急呼叫服务,而无需中断实时 911 紧急呼叫服务。 而 911 则必须在真实的紧急情况下才能呼叫。
运行应用并拨打电话
使用 webpack-dev-server
来生成并运行你的应用。 运行以下命令,在本地 Web 服务器上捆绑应用程序主机:
npx webpack-dev-server --entry ./client.js --output bundle.js --debug --devtool inline-source-map
打开浏览器,然后转到 http://localhost:8080/
。 已完成的 Web 应用会出现。
通过选择“933 测试呼叫”按钮,可以呼叫 933。
重要
Azure 通信服务仅支持拨打美国、波多黎各、加拿大、丹麦、英国和澳大利亚的紧急号码。
Azure 通信服务的语音呼叫 (PSTN) 功能可用于拨打美国、波多黎各和加拿大的紧急号码 911,丹麦的紧急号码 112,澳大利亚的紧急号码 000,以及英国的紧急号码 999 和 112。 Azure 通信服务目前不支持从这些国家或地区之外拨打这些紧急号码,也不支持拨打其他国家或地区的紧急服务。
先决条件
- 正常工作的通信服务通话 Android 应用
重要注意事项
你的应用程序可能要求能够拨打紧急号码并接听回电。 请向法律顾问核实紧急呼叫要求。
Microsoft 根据 ISO 3166-1 alpha-2 标准使用国家/地区代码。
支持的 ISO 代码仅包括美国 (美国)、PR (波多黎各)、CA (加拿大)、GB (英国)、DK(丹麦)。
如果未向 Azure 通信服务呼叫 SDK 提供国家/地区 ISO 代码,Microsoft 将使用 IP 地址来确定呼叫者的国家或地区。
如果 IP 地址无法提供可靠的地理位置(例如用户使用虚拟专用网),则需要使用呼叫 SDK 中的 API 来设置呼叫国家/地区的 ISO 代码。
如果用户从美国领土(例如关岛、美属维尔京群岛、北马里亚纳群岛或美属萨摩亚)拨打电话,则需要将 ISO 代码设置为 US。
紧急拨号超出了 Azure 通信服务直接路由的范围。
有关 Azure 通信服务中紧急服务的计费信息,请参阅定价页。
设置用于测试的按钮
将 app/src/main/res/layout/activity_main.xml 中的代码替换为以下代码片段。 这会添加一个新的按钮,用于测试紧急呼叫。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/callee_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Callee Id"
android:inputType="textPersonName"
android:layout_marginTop="100dp"
android:layout_marginHorizontal="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="46dp"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<Button
android:id="@+id/call_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Call" />
<Button
android:id="@+id/emergency_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="933 Test Call" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
指定国家或地区
指定呼叫方所在的国家/地区的 ISO 代码。 有关支持的 ISO 代码列表,请参阅有关紧急呼叫的概念性文章。
在 MainActivity.java 文件中,向方法 onCreate
添加以下代码,以检索你在 activity_main.xml 中创建的紧急按钮:
Button emergencyButton = findViewById(R.id.emergency_button);
emergencyButton.setOnClickListener(l->emergencyCall());
修改 createAgent
以指定紧急呼叫国家/地区:
private void createAgent() {
String userToken = "<User_Access_Token>";
try {
CommunicationTokenCredential credential = new CommunicationTokenCredential(userToken);
EmergencyCallOptions emergencyOptions = new EmergencyCallOptions().setCountryCode("<COUNTRY CODE>");
CallAgentOptions agentOptions = new CallAgentOptions();
callAgent = new CallClient().createCallAgent(getApplicationContext(), credential, agentOptions).get();
} catch (Exception ex) {
Toast.makeText(getApplicationContext(), "Failed to create call agent.", Toast.LENGTH_SHORT).show();
}
}
向呼叫按钮添加功能
将以下代码添加到 MainActivity.java 文件,以向紧急呼叫按钮添加相应功能。 无论你是否提供 alternateCallerId
参数,都会为你的紧急呼叫分配临时呼叫方 ID。
private void emergencyCall() {
String calleePhone = "933";
StartCallOptions options = new StartCallOptions();
ArrayList<CommunicationIdentifier> participants = new ArrayList<>();
participants.add(new PhoneNumberIdentifier(calleePhone));
call = agent.startCall(
getApplicationContext(),
participants,
options);
}
重要
933 是测试调用服务。 你可以使用它来测试紧急呼叫服务,而无需中断实时 911 紧急呼叫服务。 而 911 则必须在真实的紧急情况下才能呼叫。
运行应用并拨打电话
你现在可以使用工具栏上的运行应用按钮(或选择 Shift + F10)来运行应用。 通过选择“933 测试呼叫”按钮,可以呼叫 933。
重要
Azure 通信服务仅支持拨打美国、波多黎各、加拿大、丹麦、英国和澳大利亚的紧急号码。
Azure 通信服务的语音呼叫 (PSTN) 功能可用于拨打美国、波多黎各和加拿大的紧急号码 911,丹麦的紧急号码 112,澳大利亚的紧急号码 000,以及英国的紧急号码 999 和 112。 Azure 通信服务目前不支持从这些国家或地区之外拨打这些紧急号码,也不支持拨打其他国家或地区的紧急服务。
先决条件
- 正常工作的通信服务通话 iOS 应用
重要注意事项
你的应用程序可能要求能够拨打紧急号码并接听回电。 请向法律顾问核实紧急呼叫要求。
Microsoft 根据 ISO 3166-1 alpha-2 标准使用国家/地区代码。
支持的 ISO 代码仅包括美国 (美国)、PR (波多黎各)、CA (加拿大)、GB (英国)、DK(丹麦)。
如果未向 Azure 通信服务呼叫 SDK 提供国家/地区 ISO 代码,Microsoft 将使用 IP 地址来确定呼叫者的国家或地区。
如果 IP 地址无法提供可靠的地理位置(例如用户使用虚拟专用网),则需要使用呼叫 SDK 中的 API 来设置呼叫国家/地区的 ISO 代码。
如果用户从美国领土(例如关岛、美属维尔京群岛、北马里亚纳群岛或美属萨摩亚)拨打电话,则需要将 ISO 代码设置为 US。
紧急拨号超出了 Azure 通信服务直接路由的范围。
有关 Azure 通信服务中紧急服务的计费信息,请参阅定价页。
设置用于测试的按钮
将 ContentView.swift 中 NavigationView
的代码替换为以下代码片段。 这会添加一个新的按钮,用于测试紧急呼叫。
NavigationView {
Form {
Section {
TextField("Who would you like to call?", text: $callee)
Button(action: startCall) {
Text("Start Call")
}.disabled(callAgent == nil)
Button(action: endCall) {
Text("End Call")
}.disabled(call == nil)
Button (action: emergencyCall) {
Text("933 Test Call")
}.disabled(callAgent == nil)
Text(status)
Text(message)
}
}
.navigationBarTitle("Emergency Calling Quickstart")
}
指定国家或地区
指定呼叫方所在的国家/地区的 ISO 代码。 有关支持的 ISO 代码列表,请参阅有关紧急呼叫的概念性文章。
在 ContentView.swift 中,将 NavigationView
的 onAppear
方法中的代码替换为以下代码片段:
var userCredential: CommunicationTokenCredential?
do {
userCredential = try CommunicationTokenCredential(token: "<USER ACCESS TOKEN>")
} catch {
print("ERROR: It was not possible to create user credential.")
return
}
self.callClient = CallClient()
let emergencyOptions = EmergencyCallOptions()
emergencyOptions.countryCode = "<COUNTRY CODE>"
let callAgentOptions = CallAgentOptions()
callAgentOptions.emergencyCallOptions= emergencyOptions
// Creates the call agent
self.callClient?.createCallAgent(userCredential: userCredential!, options: callAgentOptions) { (agent, error) in
if error != nil {
print("ERROR: It was not possible to create a call agent.")
return
}
else {
self.callAgent = agent
print("Call agent successfully created.")
}
}
向呼叫按钮添加功能
将以下代码添加到 ContentView.swift 文件,以向紧急呼叫按钮添加相应功能。 无论你是否提供 alternateCallerId
参数,都会为你的紧急呼叫分配临时呼叫方 ID。
func emergencyCall() {
// Ask permissions
AVAudioSession.sharedInstance().requestRecordPermission { (granted) in
if granted {
let startCallOptions = StartCallOptions()
self.callAgent!.startCall(participants: [PhoneNumberIdentifier(phoneNumber: "933")], options: startCallOptions) { (call, error) in
if (error == nil) {
self.call = call
} else {
print("Failed to get call object")
}
}
}
}
}
重要
933 是测试调用服务。 你可以使用它来测试紧急呼叫服务,而无需中断实时 911 紧急呼叫服务。 而 911 则必须在真实的紧急情况下才能呼叫。
运行应用并拨打电话
通过选择“产品>运行”或使用 ⌘+R 键盘快捷方式,在 iOS 模拟器上生成并运行应用。 通过选择“933 测试呼叫”按钮,可以呼叫 933。
清理资源
如果想要清理并删除通信服务订阅,可以删除资源或资源组。 删除资源组时也会删除与之关联的任何其他资源。 了解有关清理资源的详细信息。
后续步骤
有关详细信息,请参阅以下文章:
- 了解通话 SDK 的功能。
- 详细了解通话工作原理。