def service_plan_description(request, responder): responder.frame['user'] = get_user_data(request.context['username']) responder.frame['service_plan'] = get_service_plan(responder.frame['user']['service_plan_id']) responder.reply(f"Ваш тарифний план {responder.frame['service_plan']['name']}.\n" + f"{responder.frame['service_plan']['description']}\n" + f"Вартість складає {responder.frame['service_plan']['price']} " f"гривень на місяць.")
def turn_on_credit_processing(request, responder): if request.intent == 'confirmation': set_credit_flag(responder.frame['user']['id'], True) responder.reply('Послугу "Кредит довіри" підключено.') return if request.intent == 'abort': responder.reply('Зрозуміло. Чим іще ми можемо вам допомогти?') return if request.intent == 'repeat': turn_on_credit_continue(request, responder) return else: responder.frame['credit_process_count'] = responder.frame.get( 'credit_process_count', 0) + 1 if responder.frame['credit_process_count'] < 3: responder.frame['user'] = get_user_data( request.context['username']) responder.frame['service_plan'] = get_service_plan( responder.frame['user']['service_plan_id']) responder.params.target_dialogue_state = 'turn_on_credit_processing' responder.reply( 'Перепрошую, я вас не зрозуміла.\n' + f'Ми можемо внести вам кредит довіри на суму {responder.frame["service_plan"]["price"]}' + f' до {str(datetime.now() + timedelta(days=10))[:10]}.' + f'Сплатити {abs(responder.frame["user"]["balance"]) + responder.frame["service_plan"]["price"]} грн ' f'потрібно протягом 10 днів. ' + f'Вас влаштовують такі умови?') return else: responder.frame['credit_process_count'] = 0 responder.reply( 'Перепрошую, я вас не зрозуміла. Чим ще можемо вам допомогти?') return
def balance_and_home_service_confirm(request, responder): if verify(request, responder, balance_and_home_service_confirm): return if request.intent == 'abort': responder.reply('На який день ви бажаєте викликати майстра?') responder.params.target_dialogue_state = 'balance_and_home_service_day' return if request.intent == 'confirmation': responder.frame['user'] = get_user_data(request.context['username']) day = responder.frame['balance_and_home_service_day'] hour = responder.frame['balance_and_home_service_hour'] call_home_service(responder.frame['user']['id'], day, hour) responder.frame['balance_and_home_service_day'] = None responder.frame['balance_and_home_service_hour'] = None responder.reply( f'Заявку на виклик майстра на {str(day)[:10]} {str(hour)[11:16]} створено.\nОчікуйте на дзвінок від майстра.' ) responder.reply('Чим ще можемо вам допомогти?') return else: responder.frame[ 'balance_and_home_service_confirm_count'] = responder.frame.get( 'balance_and_home_service_confirm_count', 0) + 1 if responder.frame['balance_and_home_service_confirm_count'] < 3: day = responder.frame['balance_and_home_service_day'] hour = responder.frame['balance_and_home_service_hour'] responder.params.target_dialogue_state = 'balance_and_home_service_confirm' responder.reply( f'Повторіть, будь ласка, ви хочете викликати майстра на {str(day)[:10]} {str(hour)[11:16]}' ) return else: responder.frame['balance_and_home_service_confirm_count'] = 0 responder.reply('Зачекайте на з\'єднання з оператором.') return
def no_internet(request, responder): if not responder.frame.get('verified', False): responder.params.target_dialogue_state = 'verify_service_number' responder.frame['return_to'] = no_internet responder.reply( f"Спочатку пройдіть верифікацію. Введіть 8 цифр вашого договору.") else: user = get_user_data(request.context['username']) balance = user['balance'] repair = user['repair'] if balance < 0: reply = f'Остання оплата на ваш рахунок була здійснена' + \ f' {user["last_payment_date"]} у розмірі {user["last_payment_amount"]} грн.' + \ f'Наразі ваша заборгованість складає {abs(balance)} грн.' \ f'Сплатіть, будь ласка, {abs(balance)} грн, щоб відновити послугу інтернету.\n\n' if not user['credit']: reply += f'Чи бажаєте ви дізнатися про послугу "Кредит довіри"?' responder.params.target_dialogue_state = 'get_credit' responder.reply(reply) elif repair: responder.reply( 'Через технічні несправності інтернет у вас не працює.' ' Наші спеціалісти вирішать цю проблему якомога швидше.' ' Чи можемо ми вам ще чимось допомогти?') else: responder.reply("Зачекайте, ми з'єднаємо вас з оператором!")
def check_balance(request, responder): if not responder.frame.get('verified', False): responder.params.target_dialogue_state = 'verify_service_number' responder.frame['return_to'] = check_balance responder.reply( f"Спочатку пройдіть верифікацію. Введіть 8 цифр вашого договору.") else: balance = get_user_data(request.context['username'])['balance'] responder.reply(f"Ваш баланс: {balance}")
def turn_on_credit_continue(request, responder): responder.frame['user'] = get_user_data(request.context['username']) responder.frame['service_plan'] = get_service_plan( responder.frame['user']['service_plan_id']) responder.params.target_dialogue_state = 'turn_on_credit_processing' responder.reply( f'Ми можемо внести вам кредит довіри на суму {responder.frame["service_plan"]["price"]}' + f' до {str(datetime.now() + timedelta(days=10))[:10]}.' + f'Сплатити {abs(responder.frame["user"]["balance"]) + responder.frame["service_plan"]["price"]} грн ' f'потрібно протягом 10 днів. ' + f'Вас влаштовують такі умови?')
def welcome(request, responder): responder.frame['greeted'] = responder.frame.get('greeted', False) username = get_user_data(request.context.get('username'))['username'] if not responder.frame['greeted']: responder.frame['greeted'] = True if username: responder.reply(f'Вітаю, {vocalized_name(username)}!') else: responder.reply('Вітаю!') else: responder.reply([f'Слухаю вас', f'Так-так, я вас слухаю', f'Так, {vocalized_name(username)}, чим можу допомогти?'])
def change_service_plan(request, responder): for e in request.entities: if e['type'] == 'service_plan': selected_plan = e['value'][0] if not responder.frame.get('verified', False): responder.params.target_dialogue_state = 'verify_service_number' responder.frame['return_to'] = change_service_plan responder.reply(f"Спочатку пройдіть верифікацію. Введіть 8 цифр вашого договору.") else: responder.frame['user'] = get_user_data(request.context['username']) responder.frame['service_plan'] = get_service_plan(responder.frame['user']['service_plan_id']) responder.params.target_dialogue_state = 'change_service_plan_selection' responder.reply(f"Зараз ваш тарифний план {responder.frame['service_plan']['name']}." + f" На який тарифний план ви бажаєте перейти?")
def _dialog_step(request, responder): # if request.intent == 'abort': # responder.reply('Зрозуміло. Чим ще можемо вам допомогти?') # return responder.frame['user'] = get_user_data( request.context['username']) entity = None for e in request.entities: if e['type'] == entity_params['type'] and e[ 'role'] == entity_params['role']: entity = entity_params['converter'](e['value'][0]['value']) if not entity: responder.frame[lock_name] = responder.frame.get(lock_name, 0) + 1 if responder.frame[lock_name] < 3: responder.params.target_dialogue_state = entity_params[ 'name'] responder.reply(entity_params['prompt']) return else: responder.frame[lock_name] = 0 responder.reply(entity_params['enter_fail_message']) return responder.frame[lock_name] = 0 if entity_params['validator'](responder.frame, entity): responder.frame[dialog_lock] = 0 if 'final' in entity_params: responder.frame[target_flag] = True if 'return_to' in responder.frame and responder.frame[ 'return_to']: responder.frame['return_to'](request, responder) else: default(request, responder) else: responder.params.target_dialogue_state = entity_params[ 'next_step'] responder.reply(entity_params['next_step_prompt']) else: responder.frame[dialog_lock] = responder.frame.get( dialog_lock, 0) + 1 if responder.frame[dialog_lock] > 3: responder.frame[dialog_lock] = 0 responder.reply(entity_params['validation_fail_message']) else: responder.params.target_dialogue_state = entity_params[ 'name'] responder.reply(entity_params['validation_retry_message'])
def get_credit(request, responder): responder.frame['user'] = get_user_data(request.context['username']) if responder.frame['user']['credit']: responder.reply( 'Послугу "Кредит довіри" уже підключено. Чим ще можемо вам допомогти?' ) return if request.intent == 'abort': responder.reply('Можливо у вас є ще якісь питання?') return if request.intent in ['confirmation', 'get_credit', 'repeat', 'clarify']: responder.params.target_dialogue_state = 'turn_on_credit' responder.reply( 'З послугою "Кредит довіри" ви можете відновити постачання інтернету одразу, ' 'а заплатити протягом 10 днів. Бажаєте підключити цю послугу зараз?' ) return else: responder.reply( 'Перепрошую, я вас не зрозуміла. Чим ще можемо вам допомогти?') return
def show_balance(request, responder): if responder.frame['with_balance']: responder.frame['with_balance'] = False balance = get_user_data(request.context['username'])['balance'] responder.reply(f"Ваш баланс: {balance}")