你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:添加紧急呼叫

使用 Azure 通信服务调用 SDK,向启用了 PSTN 的应用程序添加紧急呼叫。

重要

Azure 通信服务仅支持拨打美国、波多黎各、加拿大、丹麦、英国和澳大利亚的紧急号码。

Azure 通信服务的语音呼叫 (PSTN) 功能可用于拨打美国、波多黎各和加拿大的紧急号码 911,丹麦的紧急号码 112,澳大利亚的紧急号码 000,以及英国的紧急号码 999 和 112。 Azure 通信服务目前不支持从这些国家或地区之外拨打这些紧急号码,也不支持拨打其他国家或地区的紧急服务。

先决条件

重要注意事项

  • 你的应用程序可能要求能够拨打紧急号码并接听回电。 请向法律顾问核实紧急呼叫要求。

  • 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>
      &nbsp;
      <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 应用会出现。

已完成的 JavaScript 通话应用的屏幕截图。

通过选择“933 测试呼叫”按钮,可以呼叫 933。

重要

Azure 通信服务仅支持拨打美国、波多黎各、加拿大、丹麦、英国和澳大利亚的紧急号码。

Azure 通信服务的语音呼叫 (PSTN) 功能可用于拨打美国、波多黎各和加拿大的紧急号码 911,丹麦的紧急号码 112,澳大利亚的紧急号码 000,以及英国的紧急号码 999 和 112。 Azure 通信服务目前不支持从这些国家或地区之外拨打这些紧急号码,也不支持拨打其他国家或地区的紧急服务。

先决条件

重要注意事项

  • 你的应用程序可能要求能够拨打紧急号码并接听回电。 请向法律顾问核实紧急呼叫要求。

  • 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 则必须在真实的紧急情况下才能呼叫。

运行应用并拨打电话

已完成的 Android 通话应用的屏幕截图。

你现在可以使用工具栏上的运行应用按钮(或选择 Shift + F10)来运行应用。 通过选择“933 测试呼叫”按钮,可以呼叫 933。

重要

Azure 通信服务仅支持拨打美国、波多黎各、加拿大、丹麦、英国和澳大利亚的紧急号码。

Azure 通信服务的语音呼叫 (PSTN) 功能可用于拨打美国、波多黎各和加拿大的紧急号码 911,丹麦的紧急号码 112,澳大利亚的紧急号码 000,以及英国的紧急号码 999 和 112。 Azure 通信服务目前不支持从这些国家或地区之外拨打这些紧急号码,也不支持拨打其他国家或地区的紧急服务。

先决条件

重要注意事项

  • 你的应用程序可能要求能够拨打紧急号码并接听回电。 请向法律顾问核实紧急呼叫要求。

  • 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.swiftNavigationView 的代码替换为以下代码片段。 这会添加一个新的按钮,用于测试紧急呼叫。

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 中,将 NavigationViewonAppear 方法中的代码替换为以下代码片段:

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 则必须在真实的紧急情况下才能呼叫。

运行应用并拨打电话

已完成的 iOS 通话应用的屏幕截图。

通过选择“产品>运行”或使用 ⌘+R 键盘快捷方式,在 iOS 模拟器上生成并运行应用。 通过选择“933 测试呼叫”按钮,可以呼叫 933。

清理资源

如果想要清理并删除通信服务订阅,可以删除资源或资源组。 删除资源组时也会删除与之关联的任何其他资源。 了解有关清理资源的详细信息

后续步骤

有关详细信息,请参阅以下文章: