Отправка сообщения через WhatsApp


112

Поскольку я нашел несколько более старых сообщений, в которых говорится, что WhatsApp не поддерживает это, мне было интересно, изменилось ли что-то и есть ли способ открыть чат в WhatsApp с номером, который я отправляю через намерение?


вы пробовали поделиться провайдером действий?
Басим Шериф

Звучит интересно, но как это работает? Могу ли я поделиться строкой (номером телефона) и откроет ли она WhatsApp (или средство выбора?), Вы можете привести небольшой пример?
Diego

2
хотя в WhatsApp есть намерение ACTION_SENDTO, оно не выполняется (должным образом), следовательно, это невозможно сделать с конкретным номером телефона [это то, что я обнаружил]
Манан Шарма


Я все еще с нетерпением жду возможности прикрепить изображение и текст одновременно, но
мне

Ответы:


180

ОБНОВЛЕНИЕ См. Https://faq.whatsapp.com/en/android/26000030/?category=5245251

Функция Click to Chat в WhatsApp позволяет вам начать чат с кем-либо, не сохраняя его номер телефона в адресной книге вашего телефона. Если вы знаете номер телефона этого человека, вы можете создать ссылку, которая позволит вам начать с ним чат.

Использование: https://wa.me/15551234567

Не используйте: https://wa.me/+001-(555)1234567

Пример: https://wa.me/15551234567?text=I 'm% 20intehibited% 20in% 20your% 20car% 20for% 20sale

Оригинальный ответ Вот решение

public void onClickWhatsApp(View view) {

    PackageManager pm=getPackageManager();
    try {

        Intent waIntent = new Intent(Intent.ACTION_SEND);
        waIntent.setType("text/plain");
        String text = "YOUR TEXT HERE";

        PackageInfo info=pm.getPackageInfo("com.whatsapp", PackageManager.GET_META_DATA);
        //Check if package exists or not. If not then code 
        //in catch block will be called
        waIntent.setPackage("com.whatsapp");

        waIntent.putExtra(Intent.EXTRA_TEXT, text);
        startActivity(Intent.createChooser(waIntent, "Share with"));

   } catch (NameNotFoundException e) {
        Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
                .show();
   }  

}

См. Также http://www.whatsapp.com/faq/en/android/28000012.


Как интегрироваться с обменом сообщениями? так что пользователь может выбрать WhatsApp или обмен сообщениями
Srikanth Pai

34
Если у нас уже есть контактная информация, можно ли добавить контактную информацию и отправить сообщение, не касаясь контакта, чтобы выбрать его, и щелкнуть ОК для отправки ??
user1492955


4
Источник @MananMerevikSharma не врет ( android.googlesource.com/platform/frameworks/base/+/refs/heads/… ). Кроме того, базовый принцип Java: объект живет до тех пор, пока на него больше не будет ссылок.
JRomero

1
@MananMerevikSharma -1. Он не «превращается в нулевой указатель». Другая часть никогда не может быть достигнута. Когда WhatsApp не установлен, намерение по-прежнему отправляется, но открывается диалоговое окно, в котором говорится, что подходящего приложения нет. Это означает, что вы не предоставляете возможности проверить, установлен ли WhatsApp или нет.
0101100101

64

С помощью этого кода вы можете открыть чат WhatsApp с заданным номером.

void openWhatsappContact(String number) {
    Uri uri = Uri.parse("smsto:" + number);
    Intent i = new Intent(Intent.ACTION_SENDTO, uri);
    i.setPackage("com.whatsapp");  
    startActivity(Intent.createChooser(i, ""));
}

3
@ user2957782 Я следил за этим, сэр, но когда я нажимаю кнопку, чтобы запустить WhatsApp, он говорит: «Ни одно приложение не может выполнить это действие»
Арджун Нарахари

@VihaanVerma, не могли бы вы рассказать, как вам это удалось? Я применил тот же код для WhatsApp версии 2.11.56021 и ничего не получил ...
Аламгир Манд

1
Проверено, он отправляет меня во весь список чатов, а не в окно чата определенного номера.
Darpan

8
Это работает только тогда, когда у вас есть этот номер в вашем списке чата или списке контактов.
Anshul Tyagi

1
вместо startActivity(Intent.createChooser(i, ""));использования startActivity(i);для прямого открытия предоставленного номера чата. 1. Проверял на Samsung J7 prime, работает. 2. Номер не был ни в моем списке контактов, ни в моем списке чата. 3. если номер не использует WhatsApp, появится диалоговое окно с вопросом, хочу ли я пригласить этот контакт в WhatsApp. Я думаю, что это лучшее решение, если вы хотите предоставить поддержку WhatsApp для пользователей вашего приложения.
Мухаммад Сакиб

25

Я нашел следующее решение, сначала вам понадобится идентификатор WhatsApp:

Сопоставление с сообщениями из некоторых других тем здесь и на других форумах, имя для входа, которое я нашел, было чем-то вроде: международный код города без 0 или + в начале + номер телефона без первого 0 + @ s.whatsapp.net

Например, если вы живете в Нидерландах и у вас номер телефона 0612325032, это будет 31612325023@s.whatsapp.net -> +31 для Нидерландов без нулей или + и номер телефона без 0.

public void sendWhatsAppMessageTo(String whatsappid) {

Cursor c = getSherlockActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
        new String[] { ContactsContract.Contacts.Data._ID }, ContactsContract.Data.DATA1 + "=?",
        new String[] { whatsappid }, null);
c.moveToFirst();

Intent whatsapp = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/" + c.getString(0)));
c.close();

 if (whatsapp != null) {

startActivity(whatsapp);      

} else {
        Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
                .show();
//download for example after dialog
                Uri uri = Uri.parse("market://details?id=com.whatsapp");
                Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    }

}

Я пробую этот код, но он говорит мне, что getSherlockActivity () не определено. как это исправить ??
Eman87 05

2
@ Eman87 Диего использует Action Bar, Шерлок, так что метод. Получите объем своей деятельности вместо getSherlockActivity ().
Манан Шарма

4
Нет смысла в том, if (whatsapp != null)как две строчки над вами Intent whatsapp = new Intent(...).
Carcamano

2
Это хороший вариант, чтобы открыть окно чата напрямую, если человек присутствует в Контактах. Есть ли способ сделать то же самое для нового номера, которого нет в наших контактах?
Мохаммед Якуб Морисвала

1
Вам необходимо добавить <uses-permission android:name="android.permission.READ_CONTACTS" />разрешение вAndroidManifest.xml
Pratik Butani

16

Это должно работать независимо от того, установлен Whatsapp или нет.

boolean isWhatsappInstalled = whatsappInstalledOrNot("com.whatsapp");
if (isWhatsappInstalled) {
    Uri uri = Uri.parse("smsto:" + "98*********7")
    Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
    sendIntent.putExtra(Intent.EXTRA_TEXT, "Hai Good Morning");
    sendIntent.setPackage("com.whatsapp");
    startActivity(sendIntent);
} else {
    Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT).show();
    Uri uri = Uri.parse("market://details?id=com.whatsapp");
    Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(goToMarket);

}

private boolean whatsappInstalledOrNot(String uri) {
    PackageManager pm = getPackageManager();
    boolean app_installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        app_installed = true;
    } catch (PackageManager.NameNotFoundException e) {
        app_installed = false;
    }
    return app_installed;
}

11
Исключение Activity Not Fount даже при установленном
WhatsApp

2
Не обнаружено действий для обработки намерения {act = android.intent.action.SENDTO typ = text / plain pkg = com.whatsapp (имеет дополнения)}
Раджеш

2
Вам необходимо удалить эту строку, чтобы работать с вами sendIntent.setType ("text / plain");
MSaudi 02

2
удаление sendIntent.setType ("text / plain") позаботится о том, чтобы исключение Activity Not Found не было выбрано, но теперь текст не добавляется как сообщение
Рик ван Велзен

похоже, что это больше невозможно, действие, которое получает намерение, имеет некоторую ссылку на "sms_body", но я не могу заставить его работать
sherpya

15

Простое решение, попробуйте это.

String phoneNumberWithCountryCode = "+62820000000";
String message = "Hallo";

startActivity(
    new Intent(Intent.ACTION_VIEW,
        Uri.parse(
            String.format("https://api.whatsapp.com/send?phone=%s&text=%s", phoneNumberWithCountryCode, message)
        )
    )
);

10

Проверено на Marshmallow S5, работает!

    Uri uri = Uri.parse("smsto:" + "phone number with country code");
    Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
    sendIntent.setPackage("com.whatsapp");
    startActivity(sendIntent); 

Это откроет прямой чат с человеком, если WhatsApp не установлен, это вызовет исключение , если номер телефона не известен WhatsApp, они предложат отправить приглашение через sms или простое sms-сообщение


как насчет кнопки отправки? Можем ли мы сделать это программно ...?
gumuruh

3

Следующий код используется приложением Google Now и НЕ будет работать с другими приложениями.

Я пишу этот пост, потому что меня это злит, что WhatsApp не позволяет другим разработчикам отправлять сообщения напрямую, кроме Google.

И я хочу, чтобы другие разработчики-фрилансеры знали, что такое сотрудничество продолжается, в то время как Google продолжает говорить об «открытом для всех», а WhatsApp говорит, что они не хотят предоставлять доступ разработчикам.

Недавно WhatsApp добавил намерение специально для Google Now, которое должно выглядеть следующим образом:

Intent intent = new Intent("com.google.android.voicesearch.SEND_MESSAGE_TO_CONTACTS");
intent.setPackage("com.whatsapp");
intent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.VoiceMessagingActivity"));

intent.putExtra("com.google.android.voicesearch.extra.RECIPIENT_CONTACT_CHAT_ID", number);
intent.putExtra("android.intent.extra.TEXT", text);
intent.putExtra("search_action_token", ?????);

Я также мог узнать, что search_action_token - это PendingIntent, содержащий объект IBinder, который отправляется обратно в приложение Google и проверяется, был ли он создан Google Now.

В противном случае WhatsApp не примет сообщение.


Интересный! но не могли бы вы подробнее рассказать о "search_action_token", как мы можем его получить и реализовать.
Билал Мустафа

APK com.google.android.googlequicksearchbox Class com.google.android.search.verification.api.SearchActionVerificationService Method createGoogleVerificationIntent
black-hawk

3

В настоящее время это единственный официальный API, к которому вы можете отправить GETзапрос:

https://api.whatsapp.com/send?phone=919773207706&text=Hello

В любом случае, в WhatsApp уже запущена секретная программа API.


1
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится. - Из отзыва
Кумар Саураб

1
@KumarSaurabh Это не ссылка, это запрос GET
Zameer

3

используйте этот однострочный код для отправки сообщения через WhatsApp

//NOTE : please use with country code first 2digits without plus signed
try {
      String mobile = "911234567890";
      String msg = "Its Working";
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://api.whatsapp.com/send?phone=" + mobile + "&text=" + msg)));
      }catch (Exception e){
        //whatsapp app not install
     }

2

Для меня это работает:

PackageManager pm = context.getPackageManager();
try {
    pm.getPackageInfo("com.whatsapp", PackageManager.GET_ACTIVITIES);
    Intent intent = new Intent();
            intent.setComponent(new ComponentName(packageName,
                    ri.activityInfo.name));
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_TEXT, element);

} catch (NameNotFoundException e) {
    ToastHelper.MakeShortText("Whatsapp have not been installed.");
}

2

Вот что сработало для меня:

        Uri uri = Uri.parse("https://api.whatsapp.com/send?phone=" + "<number>" + "&text=" + "Hello WhatsApp!!");
        Intent sendIntent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(sendIntent);

2

Используйте прямой URL-адрес WhatsApp

String url = "https://api.whatsapp.com/send?phone="+number;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

1

это очень долго, но угрюмо работает. наслаждайся своим кодом :)

 //method used to show IMs
private void show_custom_chooser(String value) {
    List<ResolveInfo> list = null;
    final Intent email = new Intent(Intent.ACTION_SEND);
    email.setData(Uri.parse("sms:"));
    email.putExtra(Intent.EXTRA_TEXT, "" + value);
    email.setType("text/plain"); // vnd.android-dir/mms-sms

    WindowManager.LayoutParams WMLP = dialogCustomChooser.getWindow()
            .getAttributes();
    WMLP.gravity = Gravity.CENTER;
    dialogCustomChooser.getWindow().setAttributes(WMLP);
    dialogCustomChooser.getWindow().setBackgroundDrawable(
            new ColorDrawable(android.graphics.Color.TRANSPARENT));
    dialogCustomChooser.setCanceledOnTouchOutside(true);
    dialogCustomChooser.setContentView(R.layout.about_dialog);
    dialogCustomChooser.setCancelable(true);
    ListView lvOfIms = (ListView) dialogCustomChooser
            .findViewById(R.id.listView1);
    PackageManager pm = getPackageManager();
    List<ResolveInfo> launchables = pm.queryIntentActivities(email, 0);
    // ////////////new
    list = new ArrayList<ResolveInfo>();
    for (int i = 0; i < launchables.size(); i++) {
        String string = launchables.get(i).toString();
        Log.d("heh", string);
//check only messangers
        if (string.contains("whatsapp")) {
            list.add(launchables.get(i));
        }
    }
    Collections.sort(list, new ResolveInfo.DisplayNameComparator(pm));
    int size = launchables.size();
    adapter = new AppAdapter(pm, list, MainActivity.this);
    lvOfIms.setAdapter(adapter);
    lvOfIms.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1,
                int position, long arg3) {
            ResolveInfo launchable = adapter.getItem(position);
            ActivityInfo activity = launchable.activityInfo;
            ComponentName name = new ComponentName(
                    activity.applicationInfo.packageName, activity.name);
            email.addCategory(Intent.CATEGORY_LAUNCHER);
            email.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            email.setComponent(name);
            startActivity(email);
            dialogCustomChooser.dismiss();
        }
    });
    dialogCustomChooser.show();

}

1

Я очень опоздал, но считаю, что в настоящее время у нас есть более короткие и лучшие решения для отправки сообщений через WhatsApp.

Вы можете использовать следующее, чтобы вызвать средство выбора системы, а затем выбрать, какое приложение вы будете использовать, чтобы поделиться тем, что хотите.

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);

Если вам действительно нужно отправить через WhatsApp, все, что вам нужно сделать, это следующее (вы пропустите средство выбора системы)

 Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
    sendIntent.setType("text/plain");
    // Put this line here
    sendIntent.setPackage("com.whatsapp");
    //
    startActivity(sendIntent);

Если вам нужна дополнительная информация, вы можете найти ее здесь: WhatsApp FAQ


1

Как говорится в документации, вы можете просто использовать URL-адрес, например:

https://wa.me/15551234567

Где последний сегмент - это число в формате E164

Uri uri = Uri.parse("https://wa.me/15551234567");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

1
private fun sendWhatsappMessage(phoneNumber:String, text:String) {        
  val url = if (Intent().setPackage("com.whatsapp").resolveActivity(packageManager) != null) {
        "whatsapp://send?text=Hello&phone=$phoneNumber"
    } else {
        "https://api.whatsapp.com/send?phone=$phoneNumber&text=$text"
    }

    val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
    startActivity(browserIntent)
}

Это гораздо более простой способ добиться этого. Этот код проверяет, установлен ли WhatsApp на устройстве. Если он установлен, он обходит системный выбор, переходит к контакту в WhatsApp и предварительно заполняет текст в чате. Если он не установлен, он открывает ссылку WhatsApp в вашем браузере.


1

Вы захотите использовать URL-адрес в следующем формате ...

https://api.whatsapp.com/send?text=text

Затем вы можете попросить его отправить любой текст, который вы хотите. У вас также есть возможность указать номер телефона ...

https://api.whatsapp.com/send?text=text&phone=1234

Чего вы НЕ МОЖЕТЕ СДЕЛАТЬ, так это использовать следующее:

https://wa.me/send?text=text

Ты получишь...

Мы не смогли найти страницу, которую вы искали

wa.meтем не менее, будет работать, если вы укажете и номер телефона, и текст. Но, по большей части, если вы пытаетесь создать ссылку для обмена, вы действительно не хотите указывать номер телефона, потому что вы хотите, чтобы пользователь выбрал кого-то. В этом случае, если вы не укажете номер и не используете его в wa.meкачестве URL-адреса, все ваши ссылки для общего доступа не будут работать. Пожалуйста, используйте app.whatsapp.com.


0

Проверьте этот код,

    public void share(String subject,String text) {
     final Intent intent = new Intent(Intent.ACTION_SEND);

String score=1000;
     intent.setType("text/plain");
     intent.putExtra(Intent.EXTRA_SUBJECT, score);
     intent.putExtra(Intent.EXTRA_TEXT, text);

     startActivity(Intent.createChooser(intent, getString(R.string.share)));
}

0

Для меня это работает:

public static void shareWhatsApp(Activity appActivity, String texto) {

    Intent sendIntent = new Intent(Intent.ACTION_SEND);     
    sendIntent.setType("text/plain");
    sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, texto);

    PackageManager pm = appActivity.getApplicationContext().getPackageManager();
    final List<ResolveInfo> matches = pm.queryIntentActivities(sendIntent, 0);
    boolean temWhatsApp = false;
    for (final ResolveInfo info : matches) {
      if (info.activityInfo.packageName.startsWith("com.whatsapp"))  {
          final ComponentName name = new ComponentName(info.activityInfo.applicationInfo.packageName, info.activityInfo.name);
          sendIntent.addCategory(Intent.CATEGORY_LAUNCHER);
          sendIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK);
          sendIntent.setComponent(name);
          temWhatsApp = true;
          break;
      }
    }               

    if(temWhatsApp) {
        //abre whatsapp
        appActivity.startActivity(sendIntent);
    } else {
        //alerta - você deve ter o whatsapp instalado
        Toast.makeText(appActivity, appActivity.getString(R.string.share_whatsapp), Toast.LENGTH_SHORT).show();
    }
}

0

получите контактный номер, которому вы хотите отправить сообщение, и создайте uri для WhatsApp, здесь c - Курсор, возвращающий выбранный контакт.

Uri.parse("content://com.android.contacts/data/" + c.getString(0)));
i.setType("text/plain");
i.setPackage("com.whatsapp");           // so that only Whatsapp reacts and not the chooser
i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
i.putExtra(Intent.EXTRA_TEXT, "I'm the body.");
startActivity(i);

0

Из документации

Чтобы создать собственную ссылку с предварительно заполненным сообщением, которое будет автоматически отображаться в текстовом поле чата, используйте https://wa.me/whatsappphonenumber/?text=urlencodedtext, где whatsappphonenumber - это полный номер телефона в международном формате и URL. -encodedtext - это предварительно заполненное сообщение в кодировке URL.

Пример: https://wa.me/15551234567?text=I 'm% 20intehibited% 20in% 20your% 20car% 20for% 20sale

Пример кода

val phoneNumber = "13492838472"
    val text = "Hey, you know... I love StackOverflow :)"
    val uri = Uri.parse("https://wa.me/$phoneNumber/?text=$text")
    val sendIntent = Intent(Intent.ACTION_VIEW, uri)
    startActivity(sendIntent)

-1

Следующий API можно использовать в C ++, как показано в моей статье .

Вам необходимо определить несколько констант:

//
#define    GroupAdmin                <YOUR GROUP ADMIN MOBILE PHONE>
#define GroupName                <YOUR GROUP NAME>
#define CLIENT_ID                <YOUR CLIENT ID>
#define CLIENT_SECRET            <YOUR CLIENT SECRET>

#define GROUP_API_SERVER        L"api.whatsmate.net"
#define GROUP_API_PATH          L"/v3/whatsapp/group/text/message/12"
#define IMAGE_SINGLE_API_URL    L"http://api.whatsmate.net/v3/whatsapp/group/image/message/12"

//

Затем вы подключаетесь к конечной точке API.

hOpenHandle = InternetOpen(_T("HTTP"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hOpenHandle == NULL)
{
    return false;
}

hConnectHandle = InternetConnect(hOpenHandle,
    GROUP_API_SERVER,
    INTERNET_DEFAULT_HTTP_PORT,
    NULL, NULL, INTERNET_SERVICE_HTTP,
    0, 1);

if (hConnectHandle == NULL)
{
    InternetCloseHandle(hOpenHandle);
    return false;
}

Затем отправьте заголовок и тело и дождитесь результата, который должен быть «ОК».

Шаг 1 - откройте HTTP-запрос:

const wchar_t *AcceptTypes[] = { _T("application/json"),NULL };
HINTERNET hRequest = HttpOpenRequest(hConnectHandle, _T("POST"), GROUP_API_PATH, NULL, NULL, AcceptTypes, 0, 0);

if (hRequest == NULL)
{
    InternetCloseHandle(hConnectHandle);
    InternetCloseHandle(hOpenHandle);
    return false;
}

Шаг 2 - отправьте заголовок:

std::wstring HeaderData;

HeaderData += _T("X-WM-CLIENT-ID: ");
HeaderData += _T(CLIENT_ID);
HeaderData += _T("\r\nX-WM-CLIENT-SECRET: ");
HeaderData += _T(CLIENT_SECRET);
HeaderData += _T("\r\n");
HttpAddRequestHeaders(hRequest, HeaderData.c_str(), HeaderData.size(), NULL);

Шаг 3 - отправьте сообщение:

std::wstring WJsonData;
WJsonData += _T("{");
WJsonData += _T("\"group_admin\":\"");
WJsonData += groupAdmin;
WJsonData += _T("\",");
WJsonData += _T("\"group_name\":\"");
WJsonData += groupName;
WJsonData += _T("\",");
WJsonData += _T("\"message\":\"");
WJsonData += message;
WJsonData += _T("\"");
WJsonData += _T("}");

const std::string JsonData(WJsonData.begin(), WJsonData.end());

bResults = HttpSendRequest(hRequest, NULL, 0, (LPVOID)(JsonData.c_str()), JsonData.size());

Теперь просто проверим результат:

TCHAR StatusText[BUFFER_LENGTH] = { 0 };
DWORD StatusTextLen = BUFFER_LENGTH;
HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_TEXT, &StatusText, &StatusTextLen, NULL);
bResults = (StatusTextLen && wcscmp(StatusText, L"OK")==FALSE);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.