

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Tutorial: Memvisualisasikan panggilan dukungan pelanggan dengan OpenSearch Layanan dan Dasbor OpenSearch
<a name="walkthrough"></a>

Bab ini adalah panduan lengkap dari situasi berikut: sebuah bisnis menerima sejumlah panggilan dukungan pelanggan dan ingin menganalisisnya. Apa subjek dari setiap panggilan? Berapa banyak yang positif? Berapa banyak yang negatif? Bagaimana manajer dapat mencari atau meninjau transkrip panggilan ini?

Alur kerja manual mungkin melibatkan karyawan yang mendengarkan rekaman, mencatat subjek dari setiap panggilan, dan memutuskan apakah interaksi pelanggan itu positif atau tidak.

Proses seperti itu akan sangat padat karya. Dengan asumsi waktu rata-rata 10 menit per panggilan, setiap karyawan hanya dapat mendengarkan 48 panggilan per hari. Kecuali bias manusia, data yang mereka hasilkan akan sangat akurat, namun *jumlah* data akan minimal: hanya subjek panggilan dan sebuah boolean untuk apakah pelanggan puas atau tidak. Apa pun yang lebih terlibat, seperti transkrip lengkap, akan membutuhkan banyak waktu.

Menggunakan [Amazon S3](https://aws.amazon.com/s3/), Amazon [Transcribe, Amazon](https://aws.amazon.com/transcribe/) [Comprehend, dan OpenSearch Amazon](https://aws.amazon.com/comprehend/) Service, Anda dapat mengotomatiskan proses serupa dengan kode yang sangat sedikit dan berakhir dengan lebih banyak data. Misalnya, Anda bisa mendapatkan transkrip lengkap panggilan, kata kunci dari transkrip, dan keseluruhan “sentimen” panggilan (positif, negatif, netral, atau campuran). Kemudian Anda dapat menggunakan OpenSearch dan OpenSearch Dasbor untuk mencari dan memvisualisasikan data.

Meskipun Anda dapat menggunakan panduan ini apa adanya, tujuannya adalah untuk memicu ide tentang cara memperkaya dokumen JSON Anda sebelum Anda mengindeksnya di Layanan. OpenSearch 

**Perkiraan Biaya**

Secara umum, melakukan langkah-langkah dalam panduan ini membutuhkan biaya kurang dari \$12. Panduan menggunakan sumber daya berikut:
+ Bucket S3 dengan kurang dari 100 MB yang ditransfer dan disimpan

  Untuk mempelajari selengkapnya, lihat [Harga Amazon S3](https://aws.amazon.com/s3/pricing/).
+ OpenSearch Domain layanan dengan satu `t2.medium` instance dan 10 GiB penyimpanan EBS selama beberapa jam

  Untuk mempelajari lebih lanjut, lihat [Harga OpenSearch Layanan Amazon](https://aws.amazon.com/elasticsearch-service/pricing/).
+ Beberapa panggilan ke Amazon Transcribe

  Untuk mempelajari selengkapnya, lihat [Harga Amazon Transcribe](https://aws.amazon.com/transcribe/pricing/).
+ Beberapa pemrosesan bahasa alami panggilan ke Amazon Comprehend

  Untuk mempelajari selengkapnya, lihat [Harga Amazon Comprehend](https://aws.amazon.com/comprehend/pricing/).

**Topics**
+ [Langkah 1: Mengkonfigurasi prasyarat](#walkthrough-prereq)
+ [Langkah 2: Menyalin kode sampel](#walkthrough-script)
+ [(Opsional) Langkah 3: Mengindeks data sampel](#walkthrough-sample-data)
+ [Langkah 4: Menganalisis dan memvisualisasikan data Anda](#walkthrough-analysis)
+ [Langkah 5: Membersihkan sumber daya dan langkah selanjutnya](#walkthrough-next-steps)

## Langkah 1: Mengkonfigurasi prasyarat
<a name="walkthrough-prereq"></a>

Sebelum melanjutkan, Anda harus memiliki sumber daya berikut.


****  

| Prasyarat | Deskripsi | 
| --- | --- | 
| Buket Amazon S3 | Untuk informasi selengkapnya, lihat [Membuat Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html) di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon. | 
| OpenSearch Domain layanan | Tujuan untuk data. Untuk informasi selengkapnya, lihat [Membuat domain OpenSearch Layanan](createupdatedomains.md#createdomains). | 

Jika Anda belum memiliki sumber daya ini, Anda dapat membuatnya menggunakan perintah AWS CLI berikut:

```
aws s3 mb s3://my-transcribe-test --region us-west-2
```

```
aws opensearch create-domain --domain-name my-transcribe-test --engine-version OpenSearch_1.0 --cluster-config  InstanceType=t2.medium.search,InstanceCount=1 --ebs-options EBSEnabled=true,VolumeType=standard,VolumeSize=10 --access-policies '{"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:root"},"Action":"es:*","Resource":"arn:aws:es:us-west-2:123456789012:domain/my-transcribe-test/*"}]}' --region us-west-2
```

**catatan**  
Perintah ini menggunakan `us-west-2` Wilayah, tetapi Anda dapat menggunakan Wilayah apa pun yang didukung Amazon Comprehend. Untuk mempelajari lebih lanjut, lihat [Referensi Umum AWS](https://docs.aws.amazon.com/general/latest/gr/rande.html#comprehend_region).

## Langkah 2: Menyalin kode sampel
<a name="walkthrough-script"></a>

1. Salin dan tempel kode sampel Python 3 berikut ke dalam file baru bernama `call-center.py`:

   ```
   import boto3
   import datetime
   import json
   import requests
   from requests_aws4auth import AWS4Auth
   import time
   import urllib.request
   
   # Variables to update
   audio_file_name = '' # For example, 000001.mp3
   bucket_name = '' # For example, my-transcribe-test
   domain = '' # For example, https://search-my-transcribe-test-12345.us-west-2.es.amazonaws.com
   index = 'support-calls'
   type = '_doc'
   region = 'us-west-2'
   
   # Upload audio file to S3.
   s3_client = boto3.client('s3')
   
   audio_file = open(audio_file_name, 'rb')
   
   print('Uploading ' + audio_file_name + '...')
   response = s3_client.put_object(
       Body=audio_file,
       Bucket=bucket_name,
       Key=audio_file_name
   )
   
   # # Build the URL to the audio file on S3.
   # # Only for the us-east-1 region.
   # mp3_uri = 'https://' + bucket_name + '.s3.amazonaws.com/' + audio_file_name
   
   # Get the necessary details and build the URL to the audio file on S3.
   # For all other regions.
   response = s3_client.get_bucket_location(
       Bucket=bucket_name
   )
   bucket_region = response['LocationConstraint']
   mp3_uri = 'https://' + bucket_name + '.s3-' + bucket_region + '.amazonaws.com/' + audio_file_name
   
   # Start transcription job.
   transcribe_client = boto3.client('transcribe')
   
   print('Starting transcription job...')
   response = transcribe_client.start_transcription_job(
       TranscriptionJobName=audio_file_name,
       LanguageCode='en-US',
       MediaFormat='mp3',
       Media={
           'MediaFileUri': mp3_uri
       },
       Settings={
           'ShowSpeakerLabels': True,
           'MaxSpeakerLabels': 2 # assumes two people on a phone call
       }
   )
   
   # Wait for the transcription job to finish.
   print('Waiting for job to complete...')
   while True:
       response = transcribe_client.get_transcription_job(TranscriptionJobName=audio_file_name)
       if response['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED', 'FAILED']:
           break
       else:
           print('Still waiting...')
       time.sleep(10)
   
   transcript_uri = response['TranscriptionJob']['Transcript']['TranscriptFileUri']
   
   # Open the JSON file, read it, and get the transcript.
   response = urllib.request.urlopen(transcript_uri)
   raw_json = response.read()
   loaded_json = json.loads(raw_json)
   transcript = loaded_json['results']['transcripts'][0]['transcript']
   
   # Send transcript to Comprehend for key phrases and sentiment.
   comprehend_client = boto3.client('comprehend')
   
   # If necessary, trim the transcript.
   # If the transcript is more than 5 KB, the Comprehend calls fail.
   if len(transcript) > 5000:
       trimmed_transcript = transcript[:5000]
   else:
       trimmed_transcript = transcript
   
   print('Detecting key phrases...')
   response = comprehend_client.detect_key_phrases(
       Text=trimmed_transcript,
       LanguageCode='en'
   )
   
   keywords = []
   for keyword in response['KeyPhrases']:
       keywords.append(keyword['Text'])
   
   print('Detecting sentiment...')
   response = comprehend_client.detect_sentiment(
       Text=trimmed_transcript,
       LanguageCode='en'
   )
   
   sentiment = response['Sentiment']
   
   # Build the Amazon OpenSearch Service URL.
   id = audio_file_name.strip('.mp3')
   url = domain + '/' + index + '/' + type + '/' + id
   
   # Create the JSON document.
   json_document = {'transcript': transcript, 'keywords': keywords, 'sentiment': sentiment, 'timestamp': datetime.datetime.now().isoformat()}
   
   # Provide all details necessary to sign the indexing request.
   credentials = boto3.Session().get_credentials()
   awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, 'opensearchservice', session_token=credentials.token)
   
   # Index the document.
   print('Indexing document...')
   response = requests.put(url, auth=awsauth, json=json_document, headers=headers)
   
   print(response)
   print(response.json())
   ```

1. Perbarui enam variabel awal.

1. Instal paket yang diperlukan menggunakan perintah-perintah berikut:

   ```
   pip install boto3
   pip install requests
   pip install requests_aws4auth
   ```

1. Tempatkan Anda MP3 di direktori yang sama dengan `call-center.py` dan jalankan skrip. Sebuah output sampel berikut:

   ```
   $ python call-center.py
   Uploading 000001.mp3...
   Starting transcription job...
   Waiting for job to complete...
   Still waiting...
   Still waiting...
   Still waiting...
   Still waiting...
   Still waiting...
   Still waiting...
   Still waiting...
   Detecting key phrases...
   Detecting sentiment...
   Indexing document...
   <Response [201]>
   {u'_type': u'call', u'_seq_no': 0, u'_shards': {u'successful': 1, u'failed': 0, u'total': 2}, u'_index': u'support-calls4', u'_version': 1, u'_primary_term': 1, u'result': u'created', u'_id': u'000001'}
   ```

`call-center.py` melakukan sejumlah operasi:

1. Skrip mengunggah file audio (dalam hal ini MP3, namun Amazon Transcribe mendukung beberapa format) ke bucket S3 Anda.

1. Ini mengirimkan URL file audio ke Amazon Transcribe dan menunggu tugas transkripsi selesai.

   Waktu untuk menyelesaikan tugas transkripsi tergantung pada panjang file audio. Asumsikan menit, bukan detik.
**Tip**  
Untuk meningkatkan kualitas transkripsi, Anda dapat mengkonfigurasi [kosa kata kustom](https://docs.aws.amazon.com/transcribe/latest/dg/API_CreateVocabulary.html) untuk Amazon Transcribe.

1. Setelah tugas transkripsi selesai, skrip mengekstraksi transkrip, memangkasnya menjadi 5.000 karakter, dan mengirimkannya ke Amazon Comprehend untuk analisis kata kunci dan sentimen.

1. Terakhir, skrip menambahkan transkrip lengkap, kata kunci, sentimen, dan cap waktu saat ini ke dokumen JSON dan mengindeksnya di Layanan. OpenSearch 

**Tip**  
[LibriVox](https://librivox.org/)memiliki buku audio domain publik yang dapat Anda gunakan untuk pengujian.

## (Opsional) Langkah 3: Mengindeks data sampel
<a name="walkthrough-sample-data"></a>

Jika Anda tidak memiliki banyak rekaman panggilan berguna—dan siapa yang melakukannya?—Anda dapat [mengindeks](indexing.md) dokumen sampel di [sample-calls.zip](samples/sample-calls.zip), yang sebanding dengan apa yang dihasilkan `call-center.py`.

1. Buat file bernama `bulk-helper.py`:

   ```
   import boto3
   from opensearchpy import OpenSearch, RequestsHttpConnection
   import json
   from requests_aws4auth import AWS4Auth
   
   host = '' # For example, my-test-domain.us-west-2.es.amazonaws.com
   region = '' # For example, us-west-2
   service = 'es'
   
   bulk_file = open('sample-calls.bulk', 'r').read()
   
   credentials = boto3.Session().get_credentials()
   awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
   
   search = OpenSearch(
       hosts = [{'host': host, 'port': 443}],
       http_auth = awsauth,
       use_ssl = True,
       verify_certs = True,
       connection_class = RequestsHttpConnection
   )
   
   response = search.bulk(bulk_file)
   print(json.dumps(response, indent=2, sort_keys=True))
   ```

1. Perbarui dua variabel awal untuk `host` dan `region`.

1. Instal paket yang diperlukan menggunakan perintah berikut:

   ```
   pip install opensearch-py
   ```

1. Unduh dan unzip [sample-calls.zip](samples/sample-calls.zip).

1. Tempatkan `sample-calls.bulk` dalam direktori yang sama dengan `bulk-helper.py` dan jalankan pembantu. Sebuah output sampel berikut:

   ```
   $ python bulk-helper.py
   {
     "errors": false,
     "items": [
       {
         "index": {
           "_id": "1",
           "_index": "support-calls",
           "_primary_term": 1,
           "_seq_no": 42,
           "_shards": {
             "failed": 0,
             "successful": 1,
             "total": 2
           },
           "_type": "_doc",
           "_version": 9,
           "result": "updated",
           "status": 200
         }
       },
       ...
     ],
     "took": 27
   }
   ```

## Langkah 4: Menganalisis dan memvisualisasikan data Anda
<a name="walkthrough-analysis"></a>

Sekarang Anda memiliki beberapa data di OpenSearch Layanan, Anda dapat memvisualisasikannya menggunakan OpenSearch Dasbor.

1. Navigasi ke `https://search-domain.region.es.amazonaws.com/_dashboards`.

1. Sebelum Anda dapat menggunakan OpenSearch Dasbor, Anda memerlukan pola indeks. Dasbor menggunakan pola indeks untuk mempersempit analisis Anda ke satu atau lebih indeks. Untuk mencocokkan `support-calls` indeks yang `call-center.py` dibuat, pergi ke **Stack Management**, **Index Patterns**`support*`, dan tentukan pola indeks, lalu pilih **Langkah berikutnya**.

1. Untuk **Nama bidang Filter Waktu**, pilih **stempel waktu**.

1. Sekarang Anda dapat mulai membuat visualisasi. Pilih **Visualisasikan**, lalu tambahkan visualisasi baru.

1. Pilih diagram lingkaran dan pola indeks `support*`.

1. Visualisasi default adalah dasar, jadi pilih **Belah Irisan** untuk membuat visualisasi yang lebih menarik.

   Untuk **Agregasi**, pilih **Persyaratan**. Untuk **Bidang**, pilih **sentiment.keyword**. Lalu pilih **Terapkan perubahan** dan **Simpan**.  
![\[Contoh konfigurasi untuk diagram lingkaran Dasbor.\]](http://docs.aws.amazon.com/id_id/opensearch-service/latest/developerguide/images/sentiment-pie-chart.png)

1. Kembali ke halaman **Visualisasikan**, dan tambahkan visualisasi lain. Kali ini, pilih diagram batang horizontal.

1. Pilih **Bagi Seri**.

   Untuk **Agregasi**, pilih **Persyaratan**. Untuk **Bidang**, pilih **keywords.keyword** dan ubah **Ukuran** ke 20. Lalu pilih **Terapkan Perubahan** dan **Simpan**.  
![\[Contoh konfigurasi untuk bagan batang horizontal Dasbor.\]](http://docs.aws.amazon.com/id_id/opensearch-service/latest/developerguide/images/keyword-bar-chart.png)

1. Kembali ke halaman **Visualisasikan** dan tambahkan satu visualisasi terakhir, diagram batang vertikal.

1. Pilih **Bagi Seri**. Untuk **Agregasi**, pilih **Histogram Tanggal**. Untuk **Bidang**, pilih **stempel waktu** dan ubah **Interval** ke **Harian**.

1. Pilih **Metrik & Sumbu** dan ubah **Mode** ke **Normal**.

1. Pilih **Terapkan Perubahan** dan **Simpan**.  
![\[Contoh konfigurasi untuk bagan batang vertikal Dasbor.\]](http://docs.aws.amazon.com/id_id/opensearch-service/latest/developerguide/images/timestamp-bar-chart-2.png)

1. Sekarang setelah Anda memiliki tiga visualisasi, Anda dapat menambahkannya ke visualisasi Dasbor. Pilih **Dasbor**, buat sebuah dasbor, dan tambahkan visualisasi Anda.  
![\[Contoh visualisasi Dasbor.\]](http://docs.aws.amazon.com/id_id/opensearch-service/latest/developerguide/images/dashboard-2.png)

## Langkah 5: Membersihkan sumber daya dan langkah selanjutnya
<a name="walkthrough-next-steps"></a>

Untuk menghindari biaya yang tidak perlu, hapus bucket S3 dan domain OpenSearch Layanan. Untuk mempelajari selengkapnya, lihat [Menghapus Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-or-empty-bucket.html#delete-bucket) di *Panduan Pengguna Layanan Penyimpanan Sederhana Amazon* dan [Hapus domain OpenSearch Layanan](gsgdeleting.md) dalam panduan ini.

Transkrip membutuhkan ruang disk yang jauh lebih sedikit daripada MP3 file. Anda mungkin dapat mempersingkat jendela MP3 retensi Anda—misalnya, dari tiga bulan rekaman panggilan menjadi satu bulan—menyimpan transkrip selama bertahun-tahun, dan tetap menghemat biaya penyimpanan.

Anda juga dapat mengotomatiskan proses transkripsi menggunakan dan AWS Step Functions Lambda, menambahkan metadata tambahan sebelum mengindeks, atau membuat visualisasi yang lebih kompleks agar sesuai dengan kasus penggunaan Anda yang tepat.