Xizmat ilovalari

Bu imkoniyat Kengaytirilgan va Optimal tariflarida mavjud. Optimal tarifga o‘tganingizda ilovalarni boshqara olmaysiz — bir oy davomida faqat ularning ro‘yxatini tozalashingiz mumkin bo‘ladi. Oy tugagandan keyin ilova tashkilotdan o‘chiriladi.

Xizmat ilovalari API orqali tashkilotdagi foydalanuvchilar resurslarini boshqarish uchun ishlatiladi. Masalan, ular yordamida siz xatlarning zaxira nusxasini yaratishingiz yoki foydalanuvchi Taqvimida hodisalarni boshqarishingiz mumkin. Jami 20 tagacha xizmat ilovalarini yaratish mumkin.

Diqqat

Ofertaning 3.7-bandiga muvofiq, kirish huquqi yoqilgandan so‘ng, administrator barcha foydalanuvchilarni bu haqda xabardor qilishi va zarur hollarda ularning yozma roziligini olishi shart (agar ular avval rozilik bermagan bo‘lsa).

Xizmat ilovalarini ulash

  1. Tashkilot egasining hisobiga kiring.

  2. Tashkilotda xizmat ilovalari ro‘yxatini boshqaradigan ilovani ro‘yxatdan o‘tkazing.

    1. OAuth ilovasini yaratish sahifasini oching.

    2. Xizmat nomini kiriting va kerak bo‘lsa, ikonka qo‘shing.

    3. Ilova platformalari blokida Veb-xizmatlar bandini tanlang. Redirect URI maydonida Debug URL qo‘yish havolasini bosing.

    4. Ma’lumotlarga kirish bo‘limida tashkilotda xizmat ilovalarini boshqarish uchun zarur bo‘lgan kirish huquqlarini ko‘rsating:

      • ya360_security:service_applications_read — xizmat ilovalari ro‘yxatini o‘qish;

      • ya360_security:service_applications_write — xizmat ilovalari ro‘yxatini boshqarish (o‘qish va yozish).

    5. Aloqa uchun elektron pochta manzilini qo‘shing. Sahifaning pastki qismida Ilova yaratish tugmasini bosing. Ekranda uning tavsifi paydo bo‘ladi.

    6. ClientID maydonidan ilova identifikatorini nusxalash — bu OAuth tokenini olish uchun kerak bo‘ladi. Kelajakda barcha ilovalaringiz bilan sahifani oauth.yandex.ru/ havolasi orqali ochishingiz mumkin.

  3. OAuth tokenlarini istalgan mos usulda so‘rang. U tashkilotda barcha xizmat ilovalarini ro‘yxatdan o‘tkazish uchun kerak bo‘ladi.

    Tuzatish OAuth tokenini qo‘lda olish mumkin:

    1. Havolani bosing

      https://oauth.yandex.ru/authorize?response_type=token&client_id=<main_app_client_id>
      

      <main_app_client_id> o‘rniga 2.6-banddagi ClientID qiymatini qo‘ying.

    2. Agar OAuth token ilovangizga birinchi marta berilsa, avtorizatsiya ekrani ochiladi. Kirishdan keyin Yandex OAuth sizni token sahifasiga yo‘naltiradi. Sinov tokenlari haqida batafsil.

  4. Foydalanuvchilarni xabardor qiling va agar ular avval ruxsat bermagan bo‘lsa, ulardan taklifning 3.7-bandiga muvofiq administratorning resurslarini boshqarishga ruxsat olishini so‘rang.

  5. So‘rov yordamida xizmat ilovalari funksiyasini faollashtiring:

    POST https://api360.yandex.net/security/v1/org/<org_id>/service_applications/activate 
    

    <org_id> o‘rniga tashkilotingiz identifikatorini qo‘ying.

  6. Xizmat ilovasini ro‘yxatdan o‘tkazing. Uning yordamida foydalanuvchilarning vaqtinchalik OAuth tokenlarini olish mumkin. Vaqtinchalik tokenning amal qilish muddati 1 soat.

    1. Asosiy ilovani yaratishga o‘xshash tarzda alohida OAuth ilovasini yarating (p. 2). Bu ilovaning ruxsatlar sifatida API so‘rovlarida ishlatiladiganlarini belgilang.

    2. Tashkilot uchun avvalgi bosqichdagi xizmat ilovasini ishlating.

      Namuna
      curl --location \
      --request POST 'https://api360.yandex.net/security/v1/org/<org_id>/service_applications' \ 
      --header 'Authorization: OAuth <owner_token_to_manage_service_app>’ \
      --header 'Content-Type: application/json' \
      --data-raw '{ \
        "applications": [ \
          { \
            "id": “<OAuth_service_app_client_id>”, \
            "scopes": [ \
              "cloud_api:disk.app_folder", \
              "cloud_api:disk.read", \
              "cloud_api:disk.write", \
              "cloud_api:disk.info" \
            ] \
          } \
        ] \
      }'
      

      Kodga vazifa qo‘yasiz:

      • <org_id> — tashkilotingiz identifikatori;

      • <owner_token_to_manage_service_app> — 3-banddagi OAuth-token;

      • <OAuth_service_app_client_id> — ClientID 6.1 p dan xizmat ilovasi.

    3. Ilova xizmat sifatida to‘g‘ri kiritilganini tekshiring.

      Namuna
      curl --location  \
      --request GET 'https://api360.yandex.net/security/v1/org/<org_id>/service_applications'  \ 
      --header 'Authorization: OAuth <owner_token_to_manage_service_app>'
      

    Boshqa xizmat ilovalarini ulash uchun 6-banddagi qadamlarni takrorlang.

  7. Vaqtinchalik foydalanuvchi tokenini oling. Buni API so‘rovi yordamida amalga oshirish mumkin:

    POST /token HTTP/1.1
       Host: http://oauth.yandex.ru
       Content-type: application/x-www-form-urlencoded
    
    Namuna
    curl --location \
    --request POST 'https://oauth.yandex.ru/token' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
    --data-urlencode 'client_id=<OAuth_service_app_client_id>' \
    --data-urlencode 'client_secret=<OAuth_service_app_client_secret>' \
    --data-urlencode 'subject_token=<user_id>' \
    --data-urlencode 'subject_token_type=urn:yandex:params:oauth:token-type:uid'
    

    yoki

    curl --location
    --request POST 'https://oauth.yandex.ru/token' \ 
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
    --data-urlencode 'client_id=<OAuth_service_app_client_id>' \
    --data-urlencode 'client_secret=<OAuth_service_app_client_secret>' \
    --data-urlencode 'subject_token=<user_email>' \
    --data-urlencode 'subject_token_type=urn:yandex:params:oauth:token-type:email'
    

    Kodga vazifa qo‘yasiz:

    • <OAuth_service_app_client_id> — ClientID 6.1 p dan xizmat ilovasi.

    • <OAuth_service_app_client_secret> — Client secret xizmat ilovasi;

    • <user_id> — token olinishi kerak bo‘lgan foydalanuvchi identifikatori;

    • <user_email>username@domain.ru ko‘rinishidagi token olinishi kerak bo‘lgan foydalanuvchining elektron manzili.

    Javob Yandex 360 xizmatlarining API so‘rovlarida ishlatilishi kerak bo‘lgan tokenni o‘z ichiga oladi.

Xizmat ilovalarining dasturiy ta’minoti API 360 qo‘llanmasida batafsil tavsiflangan.

Foydalanuvchi resurslari bilan ishlash uchun so‘rovlarga misollar

Xizmat ilovalari yordamida olingan vaqt tokenlari API orqali tashkilotdagi ba’zi foydalanuvchi resurslariga murojaat qilish imkonini beradi, masalan, ma’lumotlarni qayta tiklash, audit yoki ma’lumot qidirish uchun.

Yandex Disk

Yandex Drive API fayllar bilan ishlash va ularga kirishni boshqarish uchun mo‘ljallangan. Poligon xizmati orqali Drive API ga so‘rov yuborishingiz mumkin.

Namuna

Xodim diski haqida meta-axborot so‘rovi:

curl --request GET 'https://cloud-api.yandex.net/v1/disk' \ 
--header 'Accept: application/json' \
--header 'Authorization: OAuth <oauth_token>'

<oauth_token> o‘rniga 7-banddagi foydalanuvchi vaqt tokenining qiymatini qo‘ying.

REST-API Drive bilan ishlash haqida batafsil.

Yandex Pochta

Ilovalar OAuth protokoli bo‘yicha Yandex Mail qutilariga kirishi mumkin. OAuth avtorizatsiyasini Yandex Pochta IMAP va SMTP serverlari dastaklaydi.

Namuna

IMAP protokoli bo‘yicha foydalanuvchining xatlarini hisoblash uchun Python skripti:

import imaplib

def generate_oauth2_string(username, access_token):
    auth_string = 'user=%s\1auth=Bearer %s\1\1' % (username, access_token)
    return auth_string

def get_imap_connector(username="<user_email>", token="<oauth_token>"):
    auth_string = generate_oauth2_string(username, token)
    imap_connector = imaplib.IMAP4_SSL("imap.yandex.com", 993)
    imap_connector.authenticate('XOAUTH2', lambda x: auth_string)
    return imap_connector

def get_total_emails(imap_connector):
    mailboxes = []
    ttl_emails = 0
    for mailbox in imap_connector.list()[1]:
        mailboxes.append(mailbox.decode("utf-8").split()[-1].replace('"', ''))
        for mailbox in mailboxes:
            try:
                imap_connector.select(mailbox)
                resp_code, mail_count = imap_connector.select(mailbox=mailbox, readonly=True)
                ttl_emails += int(mail_count[0].decode("utf-8"))
            except imaplib.IMAP4.error:
                print(f"Folder: {folder} Error reading emails")
            except ValueError:
                print(f"Folder: {folder} Error reading emails")
    user_logout(imap_connector)
    return ttl_emails

get_total_emails(get_imap_connector())

Kodga vazifa qo‘yasiz:

  • <user_email>username@domain.ru ko‘rinishidagi ma’lumotlar olinishi kerak bo‘lgan foydalanuvchining elektron manzili;
  • <oauth_token> — p.7 foydalanuvchining vaqtinchalik tokeni.

Pochta protokollarining ishlashi haqida batafsil axborotni IMAP tavsifi va SMTP xususiyatidan oling.

Yandex Taqvim

OAuth tokenlaridan foydalanib, foydalanuvchilarning Yandex Taqvimi bilan CalDAV protokoli orqali o‘zaro aloqada bo‘lish mumkin.

Namuna 1

Tanlangan foydalanuvchi Taqvimini o‘chirish uchun Python skripti:

import caldav

def get_principal(username, leg_token):
    client = caldav.DAVClient(url="https://caldav.yandex.ru/", username=username, password=leg_token)
    principal = client.principal()
    return principal

my_principal = get_principal("<user_email>", "<oauth_token>")

def find_delete_calendar(my_principal, calendar_name="Mening taqvimim"):
    try:
        calendar = my_principal.calendar(name=calendar_name)
        assert calendar
        print(f"We found an existing calendar with name {calendar_name}, now deleting it")
        calendar.delete()
    except caldav.error.NotFoundError:
        print("Calendar was not found")

find_delete_calendar(my_principal)

Kodga vazifa qo‘yasiz:

  • <user_email> — foydalanuvchining elektron manzili username@domain.ru uning uchun ma’lumotlarni olish kerak;

  • <oauth_token> — p.7 foydalanuvchining vaqtinchalik tokeni.

Sharh

Agar administrator foydalanuvchining taqvimini o‘chirib tashlasa, keyinchalik uni na administrator, na foydalanuvchining o‘zi tiklay olmaydi.

Namuna 2

Telemost video uchrashuviga havola bilan Taqvimda uchrashuv yaratish so‘rovlari:

  • Yakka tadbir uchun konferensiya.

    curl -v "https://caldav.yandex.ru/calendars/<user_email>/events-default/<event_uid>.ics" \
    -H "Authorization: OAuth <oauth_token>" \
    -H "Content-type: text/ics" \
    -X PUT \
    --data-binary "
    BEGIN:VCALENDAR
    BEGIN:VEVENT
    X-TELEMOST-REQUIRED:TRUE
    DESCRIPTION:Single event
    UID:<event_uid>
    DTSTART:20230417T120000Z
    END:VEVENT
    END:VCALENDAR"
    

    Kodga vazifa qo‘yasiz:

    • <user_email>username@domain.ru ko‘rinishidagi ma’lumotlar olinishi kerak bo‘lgan foydalanuvchining elektron manzili;
    • <event_uid> — uchrashuv identifikatori va fayl nomlari (masalan, a5e3e7b0-dd11-11ed);
    • <oauth_token> — p.7 foydalanuvchining vaqtinchalik tokeni.

    Muvaffaqiyatli javob namunasi:

    HTTP/1.1 201 Created
    
    curl -v "https://caldav.yandex.ru/calendars/<user_email>/events-default/<event_uid>.ics" \
      -H "Authorization: OAuth <oauth_token>"
    

    Kodga vazifa qo‘yasiz:

    • <user_email> — foydalanuvchining elektron manzili username@domain.ru uning uchun ma’lumotlarni olish kerak;

    • <event_uid> — uchrashuv identifikatori va fayl nomlari (masalan, a5e3e7b0-dd11-11ed);

    • <oauth_token> — p.7 foydalanuvchining vaqtinchalik tokeni.

    Muvaffaqiyatli javob namunasi:

    HTTP/1.1 200 OK
    BEGIN:VCALENDAR
    ...
    BEGIN:VEVENT
    DTSTART:20230417T120000Z
    DTEND:20230417T120000Z
    SUMMARY:Nomsiz
    UID:a5e3e7b0-dd11-11ed
    DESCRIPTION:Link to video conference: https://telemost.yandex.ru/j/78566269088286\n\nSingle event 
    X-TELEMOST-CONFERENCE:https://telemost.yandex.ru/j/78566269088286
    ...
    END:VEVENT
    END:VCALENDAR
    
  • Takrorlanuvchi tadbir uchun konferensiya.

    curl -v "https://caldav.yandex.ru/calendars/<user_email>/events-default/<event_uid>.ics" \
    -H "Authorization: OAuth <oauth_token>" \
    -H "Content-type: text/ics" \
    -X PUT \
    --data-binary "
    BEGIN:VCALENDAR
    BEGIN:VEVENT
    X-TELEMOST-REQUIRED:TRUE
    DESCRIPTION:Weekly event
    UID:<event_uid>
    DTSTART:20230411T200000Z
    RRULE:FREQ=WEEKLY
    END:VEVENT
    END:VCALENDAR"
    

    Kodga vazifa qo‘yasiz:

    • <user_email> — foydalanuvchining elektron manzili username@domain.ru uning uchun ma’lumotlarni olish kerak;

    • <event_uid> — uchrashuv identifikatori va fayl nomlari (masalan, a5e3e7b0-dd11-11ed);

    • <oauth_token> — p.7 foydalanuvchining vaqtinchalik tokeni.

    Muvaffaqiyatli javob namunasi:

    HTTP/1.1 201 Created
    
    curl -v "https://caldav.yandex.ru/calendars/<user_email>/events-default/<event_uid>.ics" \
      -H "Authorization: OAuth <oauth_token>"
    

    Kodga vazifa qo‘yasiz:

    • <user_email> — foydalanuvchining elektron manzili username@domain.ru uning uchun ma’lumotlarni olish kerak;

    • <event_uid> — uchrashuv identifikatori va fayl nomlari (masalan, a5e3e7b0-dd11-11ed);

    • <oauth_token> — p.7 foydalanuvchining vaqtinchalik tokeni.

    Muvaffaqiyatli javob namunasi:

    BEGIN:VCALENDAR
    ...
    BEGIN:VEVENT
    RECURRENCE-ID:20230411T200000Z
    X-TELEMOST-CONFERENCE:https://telemost.yandex.ru/j/39864310386563
    DESCRIPTION:Video muloqotga havola: https://telemost.yandex.ru/j/39864310386563\n\nWeekly event 
    ...
    END:VEVENT
    BEGIN:VEVENT
    RRULE:FREQ=WEEKLY;BYDAY=TU;INTERVAL=1
    DESCRIPTION:Video muloqotga havola: https://telemost.yandex.ru/j/39864310386563\n\nWeekly event 
    ...
    END:VEVENT
    

Taqvimda tadbir yaratish yoki o‘zgartirish uchun PUT-so‘rov yuborilganda, mijoz X-TELEMOST-REQUIRED xususiyatini VEVENT komponentlari ichiga qo‘shadi. Server bunday so‘rovni qabul qilib, Telemostdagi video uchrashuvga havolani yaratadi va uni matn shaklida uchrashuv tavsifiga qo‘shadi.

Mijoz uchrashuvlarni o‘qiyotganda server X-TELEMOST-REQUIRED xususiyatini ko‘rsatmaydi. Lekin, agar Telemostdagi video uchrashuvga havola yaratilgan bo‘lsa, bu havolani X-TELEMOST-CONFERENCE noodatiy xususiyatida qaytaradi.

CalDAV protokoli bilan ishlash haqida batafsil ma’lumotni uning xususiyatlaridan oling.

Yordam xizmatiga yozish

Ma’lumotlarga aniq foydalanuvchi nomidan ruxsat beradigan maxsus kod.

Taqvim va manzil kitobi ma’lumotlarini pochta serveri va mijoz o‘rtasida sinxronlash uchun protokol.